Vue中使用组件的三大步骤: 1. 定义组件(创建组件) 使用Vue.extend(options)创建,其中options和new Vue(options)时传入的options几乎一样,但有点区别: (1) el不要写: 最终所有的组件都要经过一个vm的管理,由vm中的el决定服务哪个容器 (2) data必须写成函数: 避免组件被复用时,数据存在引用关系。 (3) 使用template配置组件结构。 2. 注册组件 (1) 局部注册: 靠new Vue的时候传入components(组件名) (2) 全局注册: 靠Vue.component('组件名',组件) 3. 使用组件(写组件标签) <school></school> 在dom中直接写组件,不要写成闭合标签 几个注意点 1. 关于组件名: 一个单词组成: (1). 首字母小写: school (2). 首字母大写: School 多个单词组成: (1). kebab-case命名: my-school (2). CamelCase命名: MySchool(需要Vue脚手架支持) 备注: (1). 组件名尽可能回避HTML中已有的元素名称,例如: h2、H2都不行。 (2). 可以使用name配置项指定组件在开发者工具中呈现的名字。 2. 关于组件标签: (1). <school></school> (2). <school/> 备注: 不用使用脚手架时,<school/>会导致后续组件不能渲染。 3. 一个简写方式: const school = Vue.extend(options) 可简写为:const school = options vue在注册组件时有判断,如果传入的仅仅是配置项文件,vue会自动调用Vue.extend() 关于 Vue Component: 1. school组件本质是一个名为VueComponent的构造函数,且不是程序员定义的,是Vue.extend生成的。 2. 我们只需要写<school/>或<school></school>,Vue解析时会帮我们创建school组件的实例对象, 即Vue帮我们执行的: new VueComponent(options)。 3. 特别注意: 每次调用Vue.extend,返回的都是一个全新的VueComponent!!!! 4. 关于this指向: (1).组件配置中: data函数、methods中的函数、watch中的函数、computed中的函数 它们的this均是[VueComponent实例对象] (2).new Vue(options)配置中: data函数、methods中的函数、watch中的函数、computed中的函数 它们的this均是[Vue实例对象]。 5.Vue Component的实例对象,以后简称vc (也可称之为: 组件实例对象)。 Vue的实例对象,以后简称vm。 局部注册:
<body> <div id="root"> <!-- 第3步:编写组件标签 --> <!-- 注意:在dom里面写组件不可以写成闭合标签! --> <school></school> <hr /> <student></student> </div> </body> <script> // 第1步:创建组件 Vue.extend const school = Vue.extend({ template: ` <div> <h2> {{schoolName}}</h2> <h2> {{schoolAge}}</h2> <button @click="alter_school_name">点我提示学校名</button> </div> `, data: function () { return { schoolName: 'xx小学', schoolAge: 10 } }, methods: { alter_school_name: function () { alert(this.schoolName) } }, }) const student = Vue.extend({ template: ` <div> <h2> {{studentName}}</h2> <h2> {{studentAge}}</h2> </div> `, data: function () { return { studentName: '张三', studentAge: 8 } } }) let vm = new Vue({ el: "#root", // 第2步:注册组件(局部注册) components components: { school, student }, // 下面的写法也可以,但没必要 // components: { // student: student, // school: school // }, }) </script>
全局注册:
<body> <div id="root1"> <!-- 第3步:编写组件标签 --> <hello></hello> </div> <div id="root2"> <hello></hello> </div> </body> <script> // 第1步:创建组件 Vue.extend const hello = Vue.extend({ template: ` <div> <h2>你好! {{name}}</h2> </div> `, data: function () { return { name: '全局绑定' } } }) // 第2步:注册组件(全局注册)Vue.component('组件名', 组件名) Vue.component('hello', hello) let vm1 = new Vue({ el: "#root1", }) let vm2 = new Vue({ el: '#root2' }) </script>
标签:school,Vue,extend,非单,组件,new,options From: https://www.cnblogs.com/ximu1009/p/17779517.html