1.is的作用
解决html模板限制
//正常结构 <ul> <li >home</li> <li >current</li> </ul> //此时component组件中是li ,但是在语法上component 不算是真实的dom,可能会导致html模板报错 所以这里需要用到is <ul> <component :text="home"></component> <component :text="current"></component> </ul> //is <ul> <li is="component" :text="home"></li> <li is="component" :text="current"></li> </ul>
2.切换组件
tab切换,通过同台改变is的值 来显示
<template>
<div>
<div>
<ul>
<li @click="tab('home')">home</li>
<li @click="tab('currentTabComponent')">current</li>
</ul>
<div class="tabCont" :is="currentTabName"></div>
</div>
</div>
</template>
<script>
import currentTabComponent from "./currentTabComponent.vue";
import home from "./home.vue";
export default {
name: "index",
components: {
currentTabComponent,
home
},
data() {
return {
currentTabName: "home",
};
},
methods: {
tab(comName) {
this.currentTabName = comName;
}
}
};
</script>
保持状态的切换组件:
当我选择了currentTab并选择了子组件下的currenttab2以后,切换回home,在切换回来currentTab的时候 自动显示了默认的currentTab1


在某些情况下,我们需要保留刚刚选择过的选项,所以这里用到了keep-alive
代码
父组件:
<ul>
<li @click="tabNav('home')">home</li>
<li @click="tabNav('currentTab')">currentTab</li>
</ul>
<keep-alive>
<div class="tabCont" :is="tabName"></div>
</keep-alive>
import home from "./home.vue";
import currentTab from "./currentTab.vue";
export default {
name: "index",
components: {
home,
currentTab
},
data() {
return {
tabName: "home",
};
},
methods: {
tabNav(comName) {
this.tabName = comName;
}
}
子组件
<template>
<div>
<ul class="tabNav">
<li @click="tab('currentTab1')">currentTab1</li>
<li @click="tab('currentTab2')">currentTab2</li>
</ul>
<div class="tabContN" :is="currentTabName"></div>
<div class="clear"></div>
</div>
</template>
<script>
import currentTab1 from "./currentTab1.vue";
import currentTab2 from "./currentTab2.vue";
export default {
name: "currentTab",
components: {
currentTab1,
currentTab2
},
data() {
return {
currentTabName: "currentTab1"
};
},
methods: {
tab(comName) {
this.currentTabName = comName;
}
}
};
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.tabContN {
background: green;
float: left;
70%;
}
.tabNav {
float: left;
30%;
text-align: center;
}
.clear {
clear: both;
}
</style>
注意这个 <keep-alive> 要求被切换到的组件都有自己的名字,不论是通过组件的 name选项还是局部/全局注册。