无法从 Vue 路由器传递组件中的道具

Posted

技术标签:

【中文标题】无法从 Vue 路由器传递组件中的道具【英文标题】:Cannot pass props in component from Vue router 【发布时间】:2021-11-27 05:54:27 【问题描述】:

您好,我正在尝试从我的 vue 路由器传递道具,但它没有打印任何内容,并且在登录时已安装它返回未定义,但是当我尝试 console.log(this.$route.params.id); 时,它给出的值当我尝试 this.id 时返回未定义或者更确切地说,在我的用户模板中它没有输出任何东西,我正在观看的在线教程中正在使用相同的代码,请帮助我,在最近的版本中是否发生了任何修改

let User = 
  props: ['id'],
  template: `
            <div>Hello # id</div>
        `,
  mounted() 
    console.log(this.$route.params); // this is returning the value
    console.log(this.id); // this is giving undefined
  


let App = 
  template: `
            <div class="wrapper">
                <router-view></router-view>    
            </div>
        `


let router = new VueRouter(
  routes: [
    path: '/user/:id',
    component: User,
    props: true
  , ],
)

let app = new Vue(
  el: '#app',
  router: router,
  components: 
    'app': App
  
)

router.push('/user/1')
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router@2.0.0/dist/vue-router.js"></script>

<div id="app">
  <app></app>
</div>

【问题讨论】:

您的日志不工作。它也没有安装。 该应用看起来不完整,因此没有足够的上下文来重现问题。你能分享一个复制的链接吗? @tony19 运行上面的例子,在 vscode 中安装 live server (ritwick dey) 扩展,你可以复制上面的代码并创建 index.html ,在 vs code 中右键单击这个 index.html 文件,并使用实时服务器打开,您将能够重现问题 @DostonbekOripjonov 一旦您在本地服务器上运行上述代码并转到路由路径,例如localhost:8888/user/1,日志将生成 【参考方案1】:

您使用的是非常旧版本的 Vue 路由器。只需切换到当前版本 - 3.5.2 - 您的代码就会按预期工作....

let User = 
  props: ['id'],
  template: `
            <div>Hello # id</div>
        `,
  mounted() 
    console.log(this.$route.params); // this is returning the value
    console.log(this.id); // this is giving undefined
  


let App = 
  template: `
            <div class="wrapper">
                <router-view></router-view>    
            </div>
        `


let router = new VueRouter(
  routes: [
    path: '/user/:id',
    component: User,
    props: true
  , ],
)

let app = new Vue(
  el: '#app',
  router: router,
  components: 
    'app': App
  
)

router.push('/user/1')
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router@3.5.2/dist/vue-router.js"></script>

<div id="app">
  <app></app>
</div>

【讨论】:

以上是关于无法从 Vue 路由器传递组件中的道具的主要内容,如果未能解决你的问题,请参考以下文章

Vue - 通过路由器将道具传递给组件

如何使用 Vue.js 路由器将状态和事件处理程序作为道具传递给子组件?

当路由器在 vuejs2.0 中更改时,vue-route 将不同的道具传递给不同的视图组件?

如何将 BootstrapVue 中的道具传递给路由器链接

如何使用 vue-router 和单文件组件传递道具

在 reactJS 中从反应路由器链接传递道具