一、组件:
1.组件的概念
通俗的来理解,组件就是一个功能模块,组件是可以复用的vue的一个实列,并且带有一个名字
考虑的问题:提升组件的复用性,降低组件之间耦合性 加强内聚
2.组件的命名:
(1)短横线命名------>my-component-name
(2)驼峰命名法------>MyComponentName
3.组件分为全局组件和局部组件:
3.1:全局组件的注册及使用:
可以通过vue.component的方式来定义全局组件,接收两个参数,第一个参数是组件名,第二个参数是一个对象 :Vue.component('组件名', { })
(1)使用:将驼峰命名的组件转为短横线命名
例如:<MyComponentName /> 转成<my-component-name />
(2)写法:<my-component-name></my-component-name>
<my-component-name />
注意:<my-component-name />----->vue2中单闭合会阻断后面的代码,影响其他组件的使用,可放在最后,在vue3中不会影响后面的组件的使用
// 注册组件
Vue.component('myComponent', {
// 添加模板 -- 模板一定要有唯一的一个根元素
template: `
<div>hello</div>
`
})
//使用
<div id="app">
<my-component></my-component>
</div>
3.2局部组件的注册以及使用
局部组件的需要在根组件中注册 使用components
// 局部组件注册
let vm = new Vue({
el: "#app",
data: {
},
components: {
'myComponent': {
template: `
<div>
hello
</div>
`
}
}
})
//使用
<div id="app">
<my-component></my-component>
</div>
3.3 局部组件的第二种注册方式
<div id="app">
<helloworld/>
</div>
var helloWorld = {
data: function () {
return {
msg: 'Helloween'
}
},
template: `
<div>
{{msg}}
</div>
`
}
let vm = new Vue({
el: "#app",
data: {
},
components: {
"helloworld": hellWorld
//helloWorld------>第二种写法
}
})
4.组件中的属性参数
data: 组件数据,----->函数
template: 组件模板内容,
methods: {}
wacth: {}
filter:{}
5.注册组件的注意事项
- 分析函数和普通函数之间的对比
- 组件模板内容必须是单个根元素,也就是只有一个根元素
- 组件模板内容可以是模板字符串 -- 是用反引号
- 模板字符串需要浏览器支持(es6中的语法)
- data必须是一个函数,主要是函数可以开辟新的空间,这样组件不会随时更改内容
二、vue中的同名问题:
1.在使用计算属性的时候,函数名和data数据源中的数据可以同名吗?
可以同名,但data会覆盖methods。并且本就不该同名,同名说明你的命名不规范。覆盖的原因是Props、methods、data、computed、watch都是在initState函数中被初始化的。初始化顺序为computed,methods,data,props,本质上这些都是要挂载到this上面的,你如果重名的话,后面出现的属性自然而然会覆盖之前挂载的属性了。如果你的eslint配置比较严格的话,同名是编译不通过的。
2.、vue中data的属性可以和methods中的方法同名吗?为什么?
data中的属性和methods方法重名时会优先执行data中的属性并且报错