标签:watch 返回 type utf-8 定义 computed template 使用步骤 str
在vue中,组件是最重要的组合部分,官方中定义组件为可复用的vue实例,分为全局组件和局部组件,接下来通过实例来分别演示两种不同的组件。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>VUE</title> <script src="bower_components/vue/dist/vue.js"></script> <style> </style> </head> <body> <div id="box"> <aaa></aaa> </div> <script> var Aaa=Vue.extend({ template:‘<h3>我是全局组件</h3>‘ }); Vue.component(‘aaa‘,Aaa); var vm=new Vue({ el:‘#box‘, }); </script> </body> </html>
通过上面的例子,我们可以总结出全局组件的使用步骤:
因为组件是可复用的vue实例,所以它们也能接收data、computed、watch、methods以及生命周期钩子等选项。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>vue</title> <script src="bower_components/vue/dist/vue.js"></script> </head> <body> <div id="box"> <aaa></aaa> </div> <script> var Aaa=Vue.extend({ data:{ msg:‘我是全局组件‘ }, template:‘<h3>{{msg}}</h3>‘ }); Vue.component(‘aaa‘,Aaa); var vm=new Vue({ el:‘#box‘, data:{ bSign:true } }); </script> </body> </html>
当我们像往常一样使用data选项时,发现结果并不是预期中那样的,这是因为一个组件的data选项必须是一个函数,该函数返回一个对象。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>vue</title> <script src="bower_components/vue/dist/vue.js"></script> </head> <body> <div id="box"> <aaa></aaa> </div> <script> var Aaa=Vue.extend({ data(){ return { msg:‘我是全局组件‘ }; }, methods:{ change(){ this.msg=‘changed‘ } }, template:‘<h3 @click="change">{{msg}}</h3>‘ }); Vue.component(‘aaa‘,Aaa); var vm=new Vue({ el:‘#box‘, data:{ bSign:true } }); </script> </body> </html>
调用Vue.component()
注册组件时,组件的注册是全局的,这意味着该组件可以在任意Vue示例下使用。
如果不需要全局注册,或者是让组件使用在其它组件内,可以用选项对象的components属性实现局部注册。
因此我们可以将上面的全局组件改为局部组件。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>vue</title> <script src="bower_components/vue/dist/vue.js"></script> </head> <body> <div id="box"> <aaa></aaa> </div> <script> var Aaa=Vue.extend({ template:‘<h3>{{msg}}</h3>‘, data(){ return { msg:‘我是局部组件‘ } } }); var vm=new Vue({ el:‘#box‘, data:{ bSign:true }, components:{ //局部组件 aaa:Aaa } }); </script> </body> </html>
虽然上面的组件是在某个具体的vue实例下注册的,但是组件构造器还是全局的,个人认为这个并不是完全意义上的局部组件,下面这种组件才是真正意义上的局部组件。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>vue</title> <script src="bower_components/vue/dist/vue.js"></script> <style> </style> </head> <body> <div id="box"> <my-aaa></my-aaa> </div> <script> var vm=new Vue({ el:‘#box‘, components:{ ‘my-aaa‘:{ data(){ return { msg:‘welcome vue‘ } }, methods:{ change(){ this.msg=‘changed‘; } }, template:‘<h2 @click="change">局部组件-->{{msg}}</h2>‘ } } }); </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>vue</title> <script src="bower_components/vue/dist/vue.js"></script> </head> <body> <div id="box"> <my-aaa></my-aaa> </div> <template id="aaa"> <h1>标题1</h1> <ul> <li v-for="val in arr"> {{val}} </li> </ul> </template> <script> var vm=new Vue({ el:‘#box‘, components:{ ‘my-aaa‘:{ data(){ return { msg:‘welcome vue‘, arr:[‘apple‘,‘banana‘,‘orange‘] } }, methods:{ change(){ this.msg=‘changed‘; } }, template:‘#aaa‘ } } }); </script> </body> </html>
标签:watch 返回 type utf-8 定义 computed template 使用步骤 str
原文地址:https://www.cnblogs.com/yuyujuan/p/9795166.html