组件系统是 Vue 的另一个重要概念,因为它是一种抽象,允许我们使用小型、独立和通常可复用的组件构建大型应用。
仔细想想,几乎任意类型的应用界面都可以抽象为一个组件树:
组件就是一段独立的,能代表页面某一个部分的代码片段, 拥有自己独立的数据,JavaScript脚本,以及样式的 标签.
1.2 组件的好处:Vue.js的组件的使用有3个步骤:创建组件构造器、注册组件和使用组件
1.4 示例通过一个示例来了解组件的使用
使用Vue的component方法注册全局组件
<div id="app-one">
<!-- 3.在实例中使用组件 -->
<greeting></greeting>
</div>
<script>
// 1. 组件构造器
let MyComponent= Vue.extend({
// 配置对象
// 因为组件没有挂在点,所以使用模板,只有一个根节点
template: `
<div>
<p>大家好,我叫{{name}}</p>
<button @click="changeName">点击换名字</button>
</div>
`,
data: function(){
return {
name:"渣渣辉"
}
},
methods:{
changeName(){
this.name = "古天乐"
}
}
})
// 2. 通过Component方法,将构造器扩展的构造函数创建组件实例
Vue.component("Greeting",MyComponent)
// Vue 实例
const vm = new Vue({
el:"#app-one",
})
</script>
显示结果:
1.5 理解组件的创建和注册Vue.extend 方法相当于是对于原有的Vue 构造函数进行了扩展, 本质上核心还是Vue的构造函数,所以我们可以直接通过扩展的构造函数创建Vue实例
<div id="app"></div>
<script>
// 1. 通过组件构造器扩展构造函数
let MyComponent= Vue.extend({
// 配置对象
// 因为组件没有挂在点,所以使用模板,只有一个根节点
template: `
<div>
<p>大家好,我叫{{name}}</p>
<button @click="changeName">点击换名字</button>
</div>
`,
data: function(){
return {
name:"渣渣辉"
}
},
methods:{
changeName(){
this.name = "古天乐"
}
}
})
// 2. 通过扩展的构造函数创建Vue实例
new MyComponent({
el:'#app'
})
</script>
示例说明:
在vue中,一个自定义标签 vue就会把它看成一个组件,vue可以给这些标签赋予一定的意义
1.7 直接通过选项对象创建组件其实所有的Vue的组件同时也都是Vue的实例.
所以组件可接受的相同选项对象.
因此我们在创建组件的过程中也就没有必要每次都通过构造器扩展Vue构造函数
直接把构造器的选项对象作为第二个参数传递给Vue.component就可以
示例如下:
// 创建组件
Vue.component("Greeting",{
template: `
<div>
<p>大家好,我叫{{name}}</p>
<button @click="changeName">点击换名字</button>
</div>
`,
data: function(){
return {
name:"渣渣辉"
}
},
methods:{
changeName(){
this.name = "古天乐"
}
}
})
使用组件
<div id="app-one">
<greeting></greeting>
</div>
推荐使用这种方式创建组件.
注意事项:
那么接下来就让我们好好理解一些全局组件和局部组件的使用
2. 全局组件通过刚才的实例,对于全局组件相信你们已经有了一定的了解
调用Vue.component()注册组件时,组件的注册是全局的,这意味着该组件可以在任意Vue示例下使用。
通过示例了解全局组件的使用
2.1 创建全局组件通过Vue.component 方法注册全局组件, 组件名称建议使用大驼峰命名
// 在js中定义组件名时使用大驼峰式命名,
// 但是在标签html中里使用时尽量用连字符-
Vue.component('MyCom', {
template: `
<div>这是全局组件的内容</div>
`
})
2.2 创建多个Vue实例
// 实例一
new Vue({
el:"#app-one",
})
// 实例二
new Vue({
el:"#app-two",
})
2.3 在多个Vue实例中使用全局组件
<div id="app-one">
<!-- 是使用组件的时候要把大驼峰转为连字符的方式使用 -->
<my-com></my-com>
<!--
如果使用了如下的方式就会报错,
-->
<!-- <MyCom></MyCom> -->
</div>
<div id="app-two">
<!-- 如果自定义标签里面没有嵌套内容可以写成单标签的形式 -->
<my-com />
</div>
2.4 注意事项
相信你们看到了我们注册组件的时候使用的组件名是一个驼峰写法的方式,此时使用组件时的自定义标签中不能使用驼峰写法会报错的, 因为HTML不能识别大小写, 会将你写的<MyCom>识别为<mycom>这样就找不到组件了,因此会在控制台报错
但是我们可以在定义组件的使用使用连字符的方式定义组件名
示例代码如下:
<div id="app-two">
<!-- 使用组件 -->
<my-com />
</div>
<script>
// 使用连字符定义组件名
Vue.component('my-com', {
template: `
<div>这是全局组件的内容</div>
`
})
// Vue实例化
new Vue({
el:"#app",
})
</script>
通过示例,我们了解了定义组件是使用连字符和驼峰命名都可以,但是在HTML标签里使用组件的使用一定只能写成连字符的方式.
关于组件名说明:
至于为什么, 您接着往下看.
3. 局部组件有的时候我们并不希望组件在所有的实例中都能使用, 那么我们就可以将组件定义为局部组件
3.1 局部组件使用三步曲我们可以使用构造器创建局部组件,
示例代码如下:
<div id="app-one">
<!-- 3. 在注册了局部组件的实例中使用局部组件 -->
<my-component></my-component>
</div>
<div id="app-two">
<!-- 当前的这个实例并没有注册局部组件,所以会报错 -->
<my-component></my-component>
</div>
<script>
// 1. 使用构造器创建组件配置
let MyComponent = Vue.extend({
template: `
<div>
<h2>我想被创建为局部组件</h2>
</div>
`,
})
// 注册局部组件的实例
const vm = new Vue({
el:"#app-one",
// 2. 注册为只能在当前实例中使用的局部组件
components: {
"my-component": MyComponent
}
})
// 没有注册局部组件的实例
new Vue({
el:"#app-two",
})
</script>
示例说明:
因此示例的实例中app-two中是不能使用组件my-component的,会报错
3.3 直接通过选项对象来创建组件前一小节有讲过我们可以直接将选项对象注册为全局组件, 同样的我们也可以直接将选项对象注册为局部组件,Vue内部会将选项对象进行处理
示例代码如下:
<div id="app-one">
<!-- 3. 在注册了局部组件的实例中使用局部组件 -->
<my-component></my-component>
</div>
<script>
// 1. 创建局部组件的选项对象
let MyComponent = {
template: `
<div>
<h2>我想被创建为局部组件</h2>
</div>
`,
}
const vm = new Vue({
el:"#app-one",
// 2. 将选项对象注册为局部组件
components: {
"my-component": MyComponent
}
})
</script>
通过对比我们就会发现直接将选项对象注册为局部组件要来的简单一点,所以推荐使用选项对象创建组件的方式,无论是全局组件还是局部组件
这种使用选项对象直接注册为组件的方式被称作为组件注册语法糖
,Copyright © 2008-2022 秒下下载站
m.down10s.com .All Rights Reserved