1, 什么是组件?
组件是一个vue项目的基本组成部分 , 组件分为三种: 根组件, 全局组件, 局部组件<br /> 一个vue项目至少要有一个组件,就是根组件, 其他组件可根据需求创建, <br /> 例如: 轮播图组件,导航条组件,星级评分组件 等
2, 如何创建组件?
根组件: 使用 new Vue()创建的vue对象就是根组件, 必不可少<br /> 全局组件: 在全局作用域使用Vue.component()定义的组件, 在全局范围内都可用<br /> 局部组件: 在组件的components字段中定义的组件, 只能在他所在的组件中使用
3, 如何使用组件?
组件在定义后会有一个组件名, 把组件名当做标签名使用即可<br /> 组件名定义时可以用小驼峰, 使用时必须用小写
4, 为什么要使用组件?
往往一个项目中数据和功能比较多而且复杂, 如果都写在根组件中会显得臃肿,杂乱,不利于后期维护,更新, 调BUG也不方便, 可以使用组件把一个项目拆分成多个模块, 每一个模块使用一个组件来实现, 可实现代码分离, 结构清晰, 更易于阅读和维护更新<br /> 有时在项目中, 一个模块可能在多个页面使用, 此时可以使用组件封装这个模块, 使用时调用组件,实现代码的复用,简化项目
<body>
<script src='https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js'></script>
<div id='myApp'>
组件中data的数据只能在组件自身的模板中使用, 不能直接在父组件或子组件模板中用
<!-- {{age}}-{{sex}} -->
<h1></h1>
<!-- <mycom1>全局组件可以在任意一个组件的模板中调用</mycom1>
<hr>
<mycom2>局部组件只能在它的父组件模板中调用</mycom2> -->
<!-- 组件可以用双标签写法, 也可以用如下单标签写法 -->
<mycom2></mycom2>
<!-- 组件名命名规则: 建议使用小驼峰命名, 调用时改成小写, 用-连接, 有语法提示 -->
<my-com3></my-com3>
</div>
<script>
// 在全局作用域中定义的组件叫全局组件, 在全局范围内都能使用
// 使用Vue.component()创建全局组件, 第一个参数是组件名,第二个参数是组件配置
Vue.component("mycom1", {
// 在template字段中设置组件模板, 组件配置中至少要有模板
template: `<header><nav>这是页面导航条{{age}}</nav> </header>`,
// 组件中也有data动态数据, 通过data函数的返回值设置的
data(){
return {
// 由于不同组件的模板作用域是相互隔离的,所以组件的data数据只能在当前组件的模板中使用
age: 20
}
},
// 组件中用于vue对象相同的功能,如, 过滤器,计算属性,函数,监视器,生命周期钩子
})
Vue.component("myCom3", {
// 组件模板要求有且仅有一个根标签
template:`<h1>123</h1>`
})
// vue对象就是vue项目中的根组件,必不可少, 而且有且仅有一个
new Vue({
el: '#myApp',
data: { },
methods: { },
// 在一个组件的components字段中定义子组件(局部组件)
components: {
// 键值对结构, 分别是 组件名: {组件配置}
mycom2: {
template: `<h2>我是子组件mycom2,性别:{{sex}}</h2>`,
data(){return {
sex: "男"
}},
created() {
},
}
}
})
</script>
</body>
vue组件模板
<body>
<script src='https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js'></script>
<div id='myApp'>
<my-com></my-com>
</div>
<!-- 在body中创建独立组件模板, 使用template标签创建模板 -->
<template id="myTem">
<!-- template中要求根标签有且仅有一个 -->
<div>
这是子组件
</div>
</template>
<script>
// 建议在根组件创建之前,创建子组件
Vue.component("myCom", {
// template: "<div></div>",
template: "#myTem",
data(){
return{
}
}
})
new Vue({
el: '#myApp',
data: {
},
methods: {
}
})
</script>
</body>