router-view可以绑定属性在标签上吗?

vue-router中在router-view标签中,是否可以自定义绑定属性,然后在渲染的组件中获取
图片描述

自家在查看官方文档时,发现这段话,然后自己写的时候发现在组件中获取对应属性都是undefined,代码如下

<div id="app">
        <router-link to="/goods" tag="div">
            <a>aa</a>
        </router-link>
        <!-- <router-link to="a/b">bb</router-link> -->
        <router-view name="sheng" titlea="i am goods"></router-view>
    </div>

    <script>
        const Main = {
            template: '<div><h1>父级</h1><router-view></router-view></div>'
        };
        const goods = {
            props: ['titlea'],
            template: '<p>{{str}}-goods</p>',
            data () {
                return {
                    name: this.titlea,
                };
            },
            computed: {
                str () {
                    console.log(this.name);// undefined
                    return this.name;
                }
            }
        };
        const ratings = {
            template: '<p>ratings</p>'
        };
        const seller = {
            template: '<p>seller</p>'
        };
        var router = new VueRouter({
            routes: [
              {
                path: '/',
                components: {
                    sheng: Main
                },
                children:[
                  {
                    path:'/goods',
                    component: goods
                  },
                  {
                    path:'/ratings',
                    component: ratings
                  },
                  {
                    path:'/seller',
                    component: seller
                  }
                ]
              }
            ]
        });
        var vm = new Vue({
            router,
            data: {
                name: 'ab'
            },
        }).$mount('#app');

    </script>
阅读 8.7k
4 个回答

有没有这样试试?

<router-view :name="sheng" titlea="i am goods"></router-view>
       computed: {
                str () {
                    console.log(this.titlea);
                    return this.titlea;
                }
            }

直接用this.titlea试一试?

其实上面的代码并不是有没有用v-bind绑定的问题,其实是router-view上的非router-view使用属性会传给渲染组件的根元素上,由于我这个是嵌套路由,在goods组件的渲染出口router-view并没有绑定这个titlea属性,而是在父组件中,所以子组件访问这个属性就是undefine,官方文档的说法是正确的是,自己理解错了。

这个相当于父子组件传参而已。
父组件实际是:<router-view name="sheng" :titlea="titlea"></router-view> 注意titlea前后冒号。

data 里面的定义改:

data () {
    return {
        titlea: '你要传的数据',
    }
}


接数据的页面不应该跟<router-view name="sheng" :titlea=""></router-view>这个页面
处于同一个组件。在其他的组件用props 去接就行了
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题