Vue——组件的创建

vue的核心基础就是组件的使用,玩好了组件才能将前面学的基础更好的运用起来。组件的使用更使我们的项目解耦合。更加符合vue的设计思想MVVM。

那接下来就跟我看一下如何在一个Vue实例中使用组件吧!

这里有一个Vue组件的示例:

    Vue.component(‘Vheader‘,{
            data:function(){
                return {

                }
            },
            template:`<div class="header">
                        <div class="w">
                            <div class="w-l">
                                <img  src="./logo.png"/>
                            </div>
                            <div class="w-r">
                                <button>登录</button><button>注册</button>

                            </div>
                        </div>
                    </div>`
        })

组件是可复用的Vue实例,并且带有一个名字:在这个例子中是 <Vheader>。我们可以在一个通过 new Vue 创建的 Vue 根实例中,把这个组件作为自定义元素来使用:

<div id="app">
        <Vheader></Vheader>
</div>

var app = new Vue({
       el:‘#app‘,
       data:{

       }
 })

效果显示:

因为组件是可复用的 Vue 实例,所以它们与 new Vue 接收相同的选项

组件的复用

    <div id="app">
        <Vheader></Vheader>
        <br>
        <Vheader></Vheader>
        <br>
        <Vheader></Vheader>
    </div>

效果显示:

给Vheader组件中添加一个按钮,绑定数据属性count,然后你会发现点击按钮时,每个组件都会各自独立维护它的 count。因为你每用一次组件,就会有一个它的新实例被创建。

在创建组件过程中第一个参数是组件的名字,第二个参数是跟new Vue实例一样的options。跟实例对象不同的是有两点:

关于组件名的起名:https://cn.vuejs.org/v2/guide/components-registration.html

1、组件中没有el,因为el仅仅的是绑定Vue的根元素。

2、data属性不再是返回对象,而是返回一个函数。而且必须返回一个函数。

ok。介绍到这里相信大家都明白了组件的创建了。

那么通常一个应用会一颗嵌套的组件??的形式来组织。

例如,你可能会有页头、侧边栏、内容区等组件,每个组件又包含了其它的像导航链接、博文之类的组件

如果说就拿上面那个导航的例子,我们把整个Vheader组件看作是全局注册的组件。

不管怎样,比如有A、B、C三个全局注册的组件。

如果我们使用webpack这样的构建系统,它会扫描我们整个文件。大家会发现全局注册的组件意味着哪怕是你不想去使用了,webpack仍然很卖力的将这些组件构建在结果中。这会造成用户下载JavaScript的无谓的增加。

到此我们仅仅的是通过Vue.component 实现全局注册的组件,那么局部组件又是如何玩的呢?

我们可以使用JavaScript对象来定义组件:

var A = {/*......*/};
var B = {/*......*/};
var C = {/*......*/};

然后在compoents选项中定义你想要使用的组件:

new Vue({
  el: ‘#app‘
  components: {
    A
    B
  }
})

在对象中放一个类似A 的变量名其实是A:A 的缩写,即这个变量名同时是:

  • 用在模板中的自定义元素的名称
  • 包含了这个组件选项的变量名

通过Prop像子组件传递数据

上面咱们看到了我们做的导航栏。如果你不能向这个组件传递某一篇博文的标题或内容之类的我们想展示的数据的话,它是没有办法使用的。这也正是 prop 的由来。

Prop 是你可以在组件上注册的一些自定义特性。当一个值传递给一个 prop 特性的时候,它就变成了那个组件实例的一个属性。为了给导航栏传递一个标题

         Vue.component(‘Vheader‘,{
            data:function(){
                return {
                    count:0
                }
            },
            props:[‘title‘],
            template:`<div class="header">
                        <div class="w">
                            <div class="w-l">
                                <img  src="./logo.png"/>
                                <span>{{title}}</span>
                            </div>
                            <div class="w-r">
                                <button>登录</button><button>注册</button>

                            </div>

                        </div>

                    </div>`
        })

<div id="app">
    <Vheader title=‘路飞学城‘></Vheader>

</div>

另外我们还可以使用 v-bind 来动态传递 prop。

单个根元素

可能有很多同学在写代码的时候往往会在组件中这样去写:

<h3>{{ title }}</h3>
<div v-html="content"></div>

然而如果你在模板中尝试这样写,Vue 会显示一个错误,并解释道 every component must have a single root element (每个组件必须只有一个根元素)。你可以将模板的内容包裹在一个父元素内,来修复这个问题,例如:

<div>
   <h3>{{ title }}</h3>
   <div v-html="content"></div>
</div>

这里面有提到了v-html:双大括号会将数据解释为普通文本,而非 HTML 代码。为了输出真正的 HTML,你需要使用 v-html 指令。

通过事件向父组件传递数据

看个例子,比如现在我想点击导航的某个按钮,想让导航上的字体变大。那么我们需要:

在其父组件中,可以通过添加一个postFontsize数据属性来支持此功能。

      var app = new Vue({
            el:‘#app‘,
            data:{
                postFontSize:16
            },
            methods:{
                clickHandler(){
                    this.postFontSize ++;
                }
            }
        })

它可以在模板中用来控制所有导航栏上文字的字号。

<Vheader title=‘路飞学城‘ :style="{ fontSize: postFontSize + ‘px‘ }"></Vheader>

现在给导航栏上添加一个按钮来放大字号:

<div class="w-r">
        <button>登录</button><button>注册</button><button>放大文字</button>
</div>

然后再让添加的按钮干活!

<button @click=‘largeHandler‘>放大标题</button>                        
methods:{
    largeHandler(){
      this.$emit(‘luffy-title-size‘)
      }
   }

然后我们可以用 v-on 在导航栏组件上监听这个事件,就像监听一个原生 DOM 事件一样:

<Vheader title=‘路飞学城‘ @luffy-title-size=‘clickHandler‘ :style="{ fontSize: postFontSize + ‘px‘ }"></Vheader>

另外我们还可以使用时间抛出一个值:

在导航栏组件中:

methods:{
    largeHandler(){
      this.$emit(‘luffy-title-size‘,1)
      }
   }

在父组件中:

methods:{
    clickHandler(size){
       this.postFontSize +=size;
    }
}

此时这个size就是导航栏组件传过来的数值1.

好的,同学们,介绍完组件的基本使用、组件注册、父子组件传值,那么vue的基础内容就给大家介绍完了。

那么,接下来我们就得听官网的话,学完了基础,我们就开始使用vue-cli这些脚手架工具来一键搭建我们的项目。

原文地址:https://www.cnblogs.com/zsdbk/p/9392165.html

时间: 2024-10-23 23:04:41

Vue——组件的创建的相关文章

vue组件的创建

vue的核心基础就是组件的使用,玩好了组件才能将前面学的基础更好的运用起来.组件的使用更使我们的项目解耦合.更加符合vue的设计思想MVVM. 那接下来就跟我看一下如何在一个Vue实例中使用组件吧! 这里有一个Vue组件的示例: Vue.component('Vheader',{ data:function(){ return { } }, template:`<div class="header"> <div class="w"> <

vue组件的创建和使用(小功能)

titleBlock.vue组件页面 <template> <!-- 通用标题头 --> <div style="margin: 20px 0;"> <h3 style="margin-left: 20px">{{title}}</h3> <Divider /> </div> </template> <script> export default { prop

Vue.js——6.创建组件

Vue组件组件就是为了拆分Vue实例的代码量,能够不同的功能定义不同的组件创建组件的方法 1. // 创建组件 let com1=Vue.extend({ template:'<h1>hellow</h1>'//必须加标签名称 }) Vue.component('myCon1',com1)引用 <my-con1></my-con1>//或者不用驼峰 第二种 Vue.component('myCon1',{ template:'<h1>hellow

vue组件基础之创建与使用

一.创建组件 <script src="vue.js"></script> <!--引入vue.js文件--> <div id="app"> <Vheader></Vheader> //使用组件 </div> <script> //创建组件 Vue.component('Vheader', { //一定是函数 data:function () { return {} //

关于vue组件的一个小结

用vue进行开发到目前为止也有将近一年的时间了,在项目技术选型的时候隔壁组选 react的时候我们坚持使用vue作为前端的开发框架.虽然两者思想上的差异不大,但是vue的语法在代码的可读性以及后期的维护成本更加的适合,而且最近看到Apache对react的相关许可限制:这里不讨论react和vue的对比哪个好,技术框架没有最好的,只有适合项目才是最好的. 进入主题....... 组件,是vue的核心之一. 我们可以把页面各个子模块看成一个组件,可以独立拆分出来.这样不仅维护变得简单了,而且代码复

vue组件的使用1

创建vue组件,看了别人的教程 http://www.cnblogs.com/keepfool/p/5625583.html,自己也总结一下 一.’创建vue组件有四个步骤: 全局组件 1.用Vue.extend()构建一个你需要渲染的html; 2.调用Vue.component('Html里自己创建的标签',1步骤中创建的构造器名称); 3.创建一个vue实例,让其他的挂载在其标签下面; 4.html中写自己要创建的标签 <div id="app1"> <my-c

vue组件的引用:

本文是基于vue-cli脚手架的基础上对vue组件的引用做简单介绍,关于vue-cli脚手架,请见:vue脚手架的安装流程(vue-cli). 在src文件夹下创建components文件夹,并在其下面创建Home.vue和List.vue两个文件: 在App.vue中引入Home.vue和List.vue两个组件: 这样Home.vue和List.vue两个组件就被引入到App.vue组件里面了,效果图如下: 注意:引入组件的component是要带s的,而配置路由的component不要带s

JS组件系列——又一款MVVM组件:Vue(二:构建自己的Vue组件)

阅读目录 一.为什么组件很重要 二.Vue里面的组件基础知识 1.组件的概念 2.组件原理 3.组件使用 三.封装自己的Component 1.使用Component封装bootstrapTable 2.封装select 3.查看其他Vue框架源码 四.总结 正文 前言:转眼距离上篇 JS组件系列--又一款MVVM组件:Vue(一:30分钟搞定前端增删改查) 已有好几个月了,今天打算将它捡起来,发现好久不用,Vue相关技术点都生疏不少.经过这几个月的时间,Vue的发展也是异常迅猛,不过这好像和博

Vue组件基础用法

前面的话 组件(Component)是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.根据项目需求,抽象出一些组件,每个组件里包含了展现.功能和样式.每个页面,根据自己所需,使用不同的组件来拼接页面.这种开发模式使前端页面易于扩展,且灵活性高,而且组件之间也实现了解耦.本文将详细介绍Vue组件基础用法 概述 组件是一个自定义元素或称为一个模块,包括所需的模板.逻辑和样式.在HTML模板中,组件以一个自定义标签的形式存在,起到占位符的功能.通过Vue.js的声明式渲染后,