定义Vue组件
什么是组件: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组件即可;
组件化和模块化的不同:
- 使用 Vue.extend 配合 Vue.component 方法:
var login = Vue.extend({
template: '<h1>登录</h1>'
});
Vue.component('login', login);
- 直接使用 Vue.component 方法:
Vue.component('register', {
template: '<h1>注册</h1>'
});
- 将模板字符串,定义到script标签种:
<templateid="tmpl" type="x-template">
<div><a href="#">登录</a> | <a href="#">注册</a></div>
</template>
同时,需要使用 Vue.component 来定义组件:
Vue.component('account', {
template: '#tmpl'
});
```注意: 组件中的DOM结构,有且只能有唯一的根元素(Root Element)来进行包裹!
**定义一个私有的组件**
使用vue实例的属性components在内部定义一个私有组件
components:{ //定义一个实例内部的私有组件
login:{
template:'<h1>这是一个私有的组件</h1>'
}
}
或者使用
<template id="teml1">
<h1>我是私有的组件</h1>
</template>
components:{ //定义一个实例内部的私有组件
login:{
template:'#teml1'
}
}
**组件之间的切换**
*方式一:*
使用<v-if>和<v-else> 使用一个标识符来进行识别
例:<a href="" @click.prevent="flag=true">登录</a>
<a href="" @click.prevent="flag=false">注册</a>
<login v-if="flag"></login>
<register v-else="flag"></register>
*方式二*
<a href="" @click.prevent="com='login'">登录</a>
<a href="" @click.prevent="com='register'">注册</a>
<!--vue使用了component,来展示对应名称的组件,一旦使用:绑定就会去找data中的变量-->
<component :is="com"></component>
Vue.component('login',{
template:'<h1>登录组件</h1>'
})
Vue.component('register',{
template:'<h1>注册组件</h1>'
})
**注意**
在组件中可以有自己data数据,组件的data和实例的data不一样,实例中的data可以为一个对象,但是组件中的data必须是一个方法,这个方法必须返回一个对象。
原因:组件之间不能公用一个对象,每次调用组件调用data时在内部开辟一个新的对象来避免组件之间的对象公用
*使用案例*
Vue.component('mycoml',{
template:'<h1>这是一个全局组件{{msg}}</h1>',
data:function(){
return {
msg:'这是组件中的定义的数据'
};
}
})
**组件和动画之间的切换**
<!--vue使用了component,来展示对应名称的组件,一旦使用:绑定就会去找data中的变量-->
<transition mode="out-in">
<component :is="com"></component>
</transition>
使用transition 标签将component 包裹起来就可以实现动画效果,使用mode属性设置为“out-in”可以变美,再上一个元素出之后后一个元素进入