【发布时间】:2018-11-14 21:26:32
【问题描述】:
<base-link>组件
我有一个 Vue 组件 <base-link>,每次我想要一个主播时都会使用它。它主要用于应用特定于链接的样式,以便整个页面上的所有链接在不应用全局样式的情况下看起来都一样。
使<router-link> 使用<base-link>
当使用<router-link> 组件创建链接时,我无法应用这些样式(<base-link> 样式是作用域的),除非<router-link> 使用我的<base-link> 组件来创建锚元素。
幸运的是<router-link> 提供了tag attribute,这似乎正是这样做的。不幸的是,我无法让它工作。我有两个问题:
我所有的组件都在本地注册(我使用带有 Webpack 的 ES6 模块并在每次需要时在本地导入组件)。
<router-link>不知道<base-link>组件是什么并且无法渲染它。有没有办法注入一个本地组件供<router-link>使用?为了解决问题#1,我认为在全局声明
<base-link>组件就足够了。不幸的是,它仍然不起作用。这次<base-link>组件被正确渲染,但仍然不能正常工作——对点击事件没有反应。在我看来,问题在于它的href属性根本没有设置。有没有办法让<router-link>正确设置它? (无需手动设置)
问题
如何解决问题 #1 和 #2?我怀疑 #1 可能是不可能的,但我希望至少 #2 是。
代码示例
Here 是一支笔,下面的代码说明了这两个问题。
const router = new VueRouter({
routes: [
{
path: "/",
component: {
template: '<p>Homepage template</p>'
}
},
{
path: "/subpage",
component: {
template: '<p>Subpage template</p>'
}
}
]
});
// Globally registered BaseLink.
Vue.component('BaseLinkGlobal', {
props: {
href: String
},
template: `
<a
:href="href"
class="BaseLinkGlobal"
>
<slot />
</a>
`
})
const vue = new Vue({
el: "#app",
router,
components: {
// Locally registered BaseLink.
BaseLinkLocal: {
props: {
href: String
},
template: `
<a
:href="href"
class="BaseLinkLocal"
>
<slot />
</a>
`
}
},
template: `
<div>
<!-- 2 router links. One uses locally registered BaseLink
-- and the other one a globally registered one. -->
<nav>
<router-link
to="/"
tag="base-link-local"
>
Home
</router-link>
<router-link
to="/subpage"
tag="base-link-global"
>
Subpage
</router-link>
</nav>
<router-view />
</div>
`
});
【问题讨论】:
标签: javascript vue.js vue-component vue-router