1、动态组件
动态组件可以实现组件之间的切换,先看一个不使用动态组件实现组件切换显示的例子
<div id="root">
<child-one v-if="type==='child-one'"></child-one>
<child-two v-if="type==='child-two'"></child-two>
<button @click="handleBtnClick">change</button>
</div>
<script>
Vue.component('child-one',{
template: '<div>child-one</div>'
})
Vue.component('child-two',{
template:'<div>child-two</div>'
})
var vm=new Vue({
el: '#root',
data:{
type: 'child-one'
},
methods: {
handleBtnClick: function () {
this.type=(this.type==='child-one'?'child-two':'child-one');
}
}
})
</script>
结果展示:
使用动态组件:绑定is特性来切换不同的组件,如下例
<div id="root">
<component :is="type"></component> <!--使用动态组件-->
<!--<child-one v-if="type==='child-one'"></child-one>-->
<!--<child-two v-if="type==='child-two'"></child-two>-->
<button @click="handleBtnClick">change</button>
</div>
<script>
Vue.component('child-one',{
template: '<div>child-one</div>'
})
Vue.component('child-two',{
template:'<div>child-two</div>'
})
var vm=new Vue({
el: '#root',
data:{
type: 'child-one'
},
methods: {
handleBtnClick: function () {
this.type=(this.type==='child-one'?'child-two':'child-one');
}
}
})
</script>
结果展示:
2、v-once
不需要表达式
渲染普通的 HTML 元素在 Vue 中是非常快速的,但有的时候你可能有一个组件,这个组件包含了大量静态内容。在这种情况下,你可以在根元素上添加 v-once
特性以确保这些内容只计算一次然后缓存起来。即只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过。这可以用于优化更新性能。
上例可以修改为:
<div id="root">
<component :is="type"></component>
<button @click="handleBtnClick">change</button>
</div>
<script>
Vue.component('child-one',{
template: '<div v-once>child-one</div>'<--!使用v-once指令,优化性能>
})
Vue.component('child-two',{
template:'<div v-once>child-two</div>'<--!使用v-once指令,优化性能>
})
var vm=new Vue({
el: '#root',
data:{
type: 'child-one'
},
methods: {
handleBtnClick: function () {
this.type=(this.type==='child-one'?'child-two':'child-one');
}
}
})
</script>