<!--顶部小标题组件--> <template> <div class="nav_container"> <div class="iconBox" @click.prevent="change()"> <i v-if="!isCollapse" class="el-icon-s-unfold" /> <i v-else class="el-icon-s-fold" /> <!-- <menu-unfold-outlined v-if="true" /> <menu-fold-outlined v-else/> --> </div> <div> <span v-for="(item, index) in list" :key="index" style="margin: 0 5px"> <!-- <el-button size="small" @click="changeUrl(item.url)">{{ item.title }}</el-button> --> <el-tag :key="index" closable @click="changeUrl(item.url)" @close="handleClose(index)"> {{ item.title }} </el-tag> </span> </div> </div> </template> <script> export default { model: { prop: 'isCollapse', event: 'changeIsCollapse' }, props: ['isCollapse'], data() { return { list: [] } }, watch: { $route: { handler: function(val, oldVal) { // 只判断后一条 // 防止第一条监听不到 const index = this.list.findIndex((item) => item.url === val.path) if (index != -1 || this.list.length > 10) { this.list.splice(index, 1) // 存在则删除 } this.list.push({ url: val.fullPath, title: val.meta.title }) }, // 强制立即执行回调 immediate: true, // 深度观察监听 deep: true } }, methods: { handleClose(index) { this.list.splice(index, 1) }, changeUrl(url) { this.$router.push(url) }, change() { console.log(!this.isCollapse) this.$emit('changeIsCollapse', !this.isCollapse) } } } </script> <style lang="scss" scoped> .nav_container { display: flex; padding: 0 10px; box-sizing: border-box; align-items: center; height: 40px; box-shadow: 0px 0px 20px 3px #999; position: relative; z-index: 1; .iconBox { // background: red; margin: 0 15px 0 0; height: 100%; width: 40px; text-align: center; line-height: 40px; } } </style>