在大型应用开发时,页面可以划分很多部分,往往不同的页面也会有相同的部分。例如可能会有相同的头部导航。
但是如果每个页面都独自开发,这无疑增加了我们的开发成本,所以我们会把页面不同的部分拆分成独立的组件,然后在不同的页面就会共享这些组件,避免重复开发。
我们通过Vue的componet方法来定义一个全局组件
语法:
//全局组件
Vue.componet("",{})
""为此组件的名字
{}里为组件内容
全局组件的特点就是每当一个类new一个Vue对象,就都可以使用这个组件了
示例:
<body>
<div id="app">
<counter>counter>
div>
<script src="node_modules/vue/dist/vue.js">script>
<script>
Vue.component("counter",{
template:`
`,
data(){
return{
num:0
}
},
methods:{
increment(){
this.num++
},
}
})
var vue = new Vue(
{
el:"#app",
}
)
script>
我们在写template里的内容是HTML,但是我们用``这个符号,这个符号在左上角Esc的下边,因为这个符号是可以换行的,""
是不可以换行的。
还有在data属性里面的
data(){
return{}
}
这里使用return的原因是,保证这个组件在多个地方使用时,data里面的数据是独立的
组件的复用其实很简单,以上提为例,我们定义了一个全局组件counter,
多次使用这个组件就是组件的复用
<div id="app">
<counter>counter>
<counter>counter>
<counter>counter>
div>
一旦注册了全局组件,就意味着即便你以后不使用这个组件,他依然会随着Vue的加载而加载。
因此对于一些使用不频繁的组件,我们采用局部注册
我们先在外部定义一个对象,结构与创建全局组件时传递的第二个参数一致:
提示:这里的let,也可以是const、var,至于他们的区别:
let counter = {
template:`
<button @click="increment()">点我增加{
{num}}button>
`,
data(){
return{
num:0
}
},
methods:{
increment(){
this.num++
},
}
}
如果我们要使用这个局部组件就要先在Vue中注册它:
请注意:这里是components,而不是component
var vue = new Vue(
{
el:"#app",
components:{
counter:counter
}
}
)
倘若你局部组件和你起的组件名字相同,就像上面一样,你可以直接这样写
:
components:{
counter
}
如果我们想在我们定义的组件上传值该怎么办,我们可以用到props
语法
props:["",""]
示例:
<body>
<div id="app">
<message text="这是一个文本!" title="这是一个标题">message>
div>
<script src="node_modules/vue/dist/vue.js">script>
<script>
let message = {
template:`
{
{text}}
{
{title}}
`,
props:['text','title'],
data(){
return{
}
}
}
var vue = new Vue({
el:"#app"