1、is属性:通过is动态绑定组件名称,可以动态切换显示的组件
<body>
<div id="app">
<button @click='changeName'>更改名称</button>
<component :is='name'></component>
</div>
</div>
<script src="vue.js"></script>
<script>
Vue.component('name1',{
template:`
<div>
name1
</div>
`
});
Vue.component('name2',{
template:`
<div>
name2
</div>
`
})
var vm = new Vue({
el: '#app',
data: {
name:'name2'
},
methods: {
changeName: function() {
this.name = this.name === 'name1'?'name2':'name1';
}
}
})
</script>
2、keep-alive标签:被keep-alive元素包裹的组件会被缓存,缓存之后组件重新渲染时会直接从缓存中获取,避免了每次组件都重新渲染
我们将上面的例子改一下,在组件渲染的时候加上log记录一下
<body>
<div id="app">
<button @click='changeName'>更改名称</button>
<keep-alive>
<component :is='name'></component>
</keep-alive>
</div>
</div>
<script src="vue.js"></script>
<script>
Vue.component('name1',{
template:`
<div>
name1
</div>
`,
created: function(){
console.log('name1')//多次渲染则多次输出
}
});
Vue.component('name2',{
template:`
<div>
name2
</div>
`,
created: function(){
console.log('name2')// 多次渲染则多次输出
}
})
var vm = new Vue({
el: '#app',
data: {
name:'name2'
},
methods: {
changeName: function() {
this.name = this.name === 'name1'?'name2':'name1';
}
}
})
</script>
结果:点击多次按钮,log只输出一次即可证明,组件只渲染了一次
3、refs属性:js获取dom元素的时候,都是使用document.getelementbyid("xx")这种获取,vue提供了这个属性,获取dom元素,这样就可以根据这个属性进行修改dom样式了。
<body>
<div id="app">
<button @click='changeName'>更改名称</button>
<div ref='demo'></div>
</div>
</div>
<script src="vue.js"></script>
<script>
var vm = new Vue({
el: '#app',
data: {
name:'name1'
},
methods: {
changeName: function() {
this.$refs.demo.innerText=this.name;
}
}
})
</script>
ref也可以用来获取组件的对象。
<body>
<div id="app">
<button @click='changeName'>更改名称</button>
<name1 ref='demo'> </name1>
</div>
</div>
<script src="vue.js"></script>
<script>
Vue.component('name1',{
template:`
<div>
name1
</div>
`,
data:function(){return {msg:'name1'}},
});
var vm = new Vue({
el: '#app',
data: {
},
// component:{child:name1}
// ,
methods: {
changeName: function() {
alert(this.$refs.demo.msg);
}
}
})
</script>
