vue-router 动态生成v-link列表的问题!

发布于 2022-09-02 00:18:47 字数 3185 浏览 14 评论 0

github上也提了个issue:https://github.com/vuejs/vue-router/issues/319

下面请听我娓娓道来,首先我有一个萌萌哒Vue侧边栏组件

class Sidebar extends VueComponent{
    constructor(options){
        super(options,{
            template: require("./index.jade")
            , data:{
                items:Object.keys(router).map(key=>{
                    return {route:key,name:router[key].name}
                })
            }
        })
    }
}

首先

模板文件长这样子

div.col-sm-3
    template( v-for="item in items" )
        a(class="btn btn-secondary btn-block" v-link="{ path:'{{item.route}}' }")="{{item.name}}"

我得到的结果,v-link神秘失效的

<div class="col-sm-3">
<a class="btn btn-secondary btn-block" >xxx</a>
<a class="btn btn-secondary btn-block" >aaa</a>
</div>

于是我又试了下

div.col-sm-3
    template( v-for="item in items" )
        a(class="btn btn-secondary btn-block" data-v-link="{ path:'{{item.route}}' }")="{{item.name}}"
<div class="col-sm-3">
<a class="btn btn-secondary btn-block" data-v-link="{ path:'/chart-tendency' }">xxx</a>
<a class="btn btn-secondary btn-block" data-v-link="{ path:'/chart-mesh' }">aaa</a>
</div>

说明v-link确实是被传进去了的

然后我又

div.col-sm-3
    a(class="btn btn-secondary btn-block" v-link="{ path:'haha' }")="why!"
    template( v-for="item in items" )
        a(class="btn btn-secondary btn-block" v-link="{ path:'{{item.route}}' }")="{{item.name}}"
<div class="col-sm-3">
<a class="btn btn-secondary btn-block" href="{ path:'haha' }">why</a>
<a class="btn btn-secondary btn-block" >xxx</a>
<a class="btn btn-secondary btn-block" >aaa</a>
</div>

直接填写v-link是有效果的

最后我终于找到了一个透明胶勉强解决

div.col-sm-3
    template( v-for="item in items" )
        a(class="btn btn-secondary btn-block" href="#!{{item.route}}")="{{item.name}}"
<div class="col-sm-3">
<a class="btn btn-secondary btn-block" href="#!/chart-tendency">xxx</a>
<a class="btn btn-secondary btn-block" href="#!/chart-mesh">aaa</a>
</div>

又找到了个透明胶,这样可以用v-link提供的一些属性

let routerButtons = routerObjects.reduce((previousValue, obj)=>{
    return previousValue+`<a class="btn btn-secondary btn-block" v-link='${JSON.stringify(obj)}'>${obj.name}</a>`
},"")

class Sidebar extends VueComponent{
    constructor(options){
        super(options,{
            template: `<div class="col-sm-3">
                ${routerButtons}
            </div>`
            , data:{

            }
        })
    }
}

这样肯定不是最好的方法,只是勉强解决了。

于是来问下大家

问题解决

看来特殊的属性是不能用{{}}

div.col-sm-3
    template( v-for="item in items" )
        a(class="btn btn-secondary btn-block" v-link="item" v-text="item.name")

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我不是你的备胎 2022-09-09 00:18:47

既然你的vue-router配置了name, vue-router 使用 v-link="{name:'xx'}" 也可以 。

<a v-for="item in items" v-link="item" v-text="item.name"></a>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文