使用 vue.js,如何将活动标签设置为当前活动路径?
With vue.js, how do I set an active tag to the currently active path?
在我的模板中,我有
<ul class="nav nav-pills nav-fill">
<li class="nav-item">
<router-link
:to="{
name: 'ConversationDetailHighlights',
params: {
id: conversation.id
}
}"
class="nav-link"
active-class="active"
v-bind:class="{active: currentlyActive === 'ConversationDetailHighlights'}"
>Highlights</router-link>
</li>
<li class="nav-item">
<router-link
:to="{
name: 'ConversationDetailFullTranscript',
params: {
id: conversation.id
}
}"
class="nav-link"
active-class="active"
v-bind:class="{active: currentlyActive === 'ConversationDetailFullTranscript'}"
>Full Transcript</router-link>
</li>
</ul>
在我的脚本中:
data() {
return {currentlyActive = 'ConversationDetailHighlights'}
}
watch: {
$route(to) {
this.currentlyActive = to.name;
}
},
mounted() {
this.currentlyActive = this.$route.name;
},
但是,当我单击 Transcript
时,两个 li
都是 active
。如何让 highlights
变为非活动状态?
你做的太复杂了。 vue-router
已包含在活动 <router-link>
组件上设置 css-class 所需的所有内容。
Notice that a automatically gets the .router-link-active class when its target route is matched. You can learn more about it in its API reference.
所以您需要做的就是设置您使用 active-class
属性选择的 .active
css-class 的样式。
注意多次路由可能同时匹配。例如。 /
将始终匹配。在那种情况下,您应该输入确切的属性:
<router-link to="/" exact active-class="active" />
在我的模板中,我有
<ul class="nav nav-pills nav-fill">
<li class="nav-item">
<router-link
:to="{
name: 'ConversationDetailHighlights',
params: {
id: conversation.id
}
}"
class="nav-link"
active-class="active"
v-bind:class="{active: currentlyActive === 'ConversationDetailHighlights'}"
>Highlights</router-link>
</li>
<li class="nav-item">
<router-link
:to="{
name: 'ConversationDetailFullTranscript',
params: {
id: conversation.id
}
}"
class="nav-link"
active-class="active"
v-bind:class="{active: currentlyActive === 'ConversationDetailFullTranscript'}"
>Full Transcript</router-link>
</li>
</ul>
在我的脚本中:
data() {
return {currentlyActive = 'ConversationDetailHighlights'}
}
watch: {
$route(to) {
this.currentlyActive = to.name;
}
},
mounted() {
this.currentlyActive = this.$route.name;
},
但是,当我单击 Transcript
时,两个 li
都是 active
。如何让 highlights
变为非活动状态?
你做的太复杂了。 vue-router
已包含在活动 <router-link>
组件上设置 css-class 所需的所有内容。
Notice that a automatically gets the .router-link-active class when its target route is matched. You can learn more about it in its API reference.
所以您需要做的就是设置您使用 active-class
属性选择的 .active
css-class 的样式。
注意多次路由可能同时匹配。例如。 /
将始终匹配。在那种情况下,您应该输入确切的属性:
<router-link to="/" exact active-class="active" />