//全局注册:
Vue.component("my-component",{ template:'<div>A custom component!</div>' });
/*交换位置会报错----创建组件必须在根实例化之前*/
//创建根实例:
new Vue({ el:"#app" })
---------
//局部注册:
new Vue({ el: "#app1", components: { // <my-zujian> 将只在父组件模板中可用 'my-zujian': { template: '<div>我是局部组件</div>' } } });
//html:
<html lang="en"> <head> <meta charset="UTF-8" /> <title>vue2.0组件:</title> <script src="./vue.js"></script> </head> <body> <div>全局组件也必须应用在实例上,不然不显示;</div> <hr> <div id="app"> <my-component></my-component> </div> <div id="app1"> <my-zujian></my-zujian> <my-component></my-component> </div> </body> </html>
总结: 全局注册的什么地方都可以使用(当然也要是vue管辖范围内); 局部注册的只在挂载当前的元素下可以使用:
以上为Vue简化的语法语法糖注册;
再看一下:
vue组件的注册明确步骤:有助于理解 Vue.extend()和Vue.component()全局API;
1.其中:Vue.extend()不管是注册全局还是局部都会要用到:
2.Vue.component()用于注册全局组件:
<html> <meta charset="UTF-8" /> <body> <div id="app"> <!-- 3. my-component只能在#app下使用--> <h4>局部注册方式</h4> <my-component></my-component> </div> <div id="app1"> <!-- 3. my-comp--> <h4>全局注册</h4> <my-comp></my-comp> </div> <div id="app2"> <!-- 3. my-comp--> <h4>全局注册</h4> <my-comp></my-comp> </div> </body> <script src="vue.js"></script> <script> //局部: 1.创建一个组件构造器 var myComponent = Vue.extend({ template: '<div>This is my first component! {{name}}</div>', data(){ return { name:"liuliuiu" } }//es6语法; }); new Vue({ el: '#app', components: { // 2. 将myComponent组件注册到Vue实例下 'my-component' : myComponent } }); //全局:1.创建一个组件构造器 var myComponent = Vue.extend({ template: '<div>This is a component!</div>' }) Vue.component('my-comp', myComponent) var app1 = new Vue({ el: '#app1' }); var app2 = new Vue({ el: '#app2' }); </script> </html>
问题:
个人理解,全局的组件在任何被Vue挂载的元素下都可以使用:
但是文中的第二种方式,当全局组件和局部组件放在同一个Vue挂载元素下的时候会出现警告:(不过内容是渲染出来了);
而第一种注册方式则不会出现警告 Vue版本为2.5.1