为什么组件道具未定义(vue router)
Why is component props undefined (vue router)
我是 Vue 新手,正在尝试学习如何应用 Vue 路由器。我有正常的路由工作没问题。当我尝试使用动态路由时,一切都继续正常工作。当我尝试将 props 传递给动态路由时,我的代码中断了。
我正在使用这些 cdn 版本的 Vue 和 Vue 路由器,它们是官方网站建议的版本:
- https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js
- https://unpkg.com/vue-router@2.0.0/dist/vue-router.js
HTML
<div id="app">
<h1>{{ message }}</h1>
<nav>
<router-link to="/">Home</router-link>
<router-link to="/about">About</router-link>
<router-link to="/user/John">Name</router-link>
</nav>
<!-- route outlet -->
<!-- component matched by route will render here -->
<router-view></router-view>
</div>
JS
// Route components
const Home = { template: '<div>Home</div>' };
const About = { template: '<div>About</div>' };
const User = { props: ['name'], template: `
<div>
<div>User {{ name }}</div>
<button @click="checkName">Check</button>
</div>`,
methods: {
checkName: function() {
console.log('Params name: ' + this.$route.params.name);
console.log('Props name: ' + this.name);
}
}
};
// Routes for router
const routes = [
{ path: '/', component: Home },
{ path: '/home', redirect: Home },
{ path: '/about', component: About },
{ path: '/user/:name', component: User, props: true }
];
const router = new VueRouter({
routes: routes
});
const app = new Vue({
el: '#app',
data: {
message: 'VueJS Router'
},
router: router
});
当我导航到 'Name' 页面时,静态文本呈现良好,但动态文本无法加载。我添加了一个按钮,它将记录 name 从 props 和 $route.params 到用户的值。单击时发现 props 中的 name 值未定义,但 params 中的 name 值是正确的。为什么是这样?
如果你坚持使用 VueRouter@2.0.0 或更低版本:
您期望的 name
不是作为道具传递的,而是作为路由参数传递的,cf. Dynamic route matching.
您需要按照以下方式从您的模板访问它:$route.params.name
。
您也可以使用计算值。
如果可以更新VueRouter
正如另一个答案中所述,并且根据 release note of VueRouter@2.2.0,将路由参数作为道具传递仅在 v2.2.0 中引入,您使用的是 v2.0.0。如果您想使用道具,您需要更新到(至少)v2.2.0。
Vue Router 安装页面上提供的 CDN link 已过时。而不是:
https://unpkg.com/vue-router@2.0.0/dist/vue-router.js
使用:
https://unpkg.com/vue-router@3.0.1/dist/vue-router.js
此处提供答案:
https://forum.vuejs.org/t/why-is-component-props-undefined-vue-router/34929/5
我是 Vue 新手,正在尝试学习如何应用 Vue 路由器。我有正常的路由工作没问题。当我尝试使用动态路由时,一切都继续正常工作。当我尝试将 props 传递给动态路由时,我的代码中断了。
我正在使用这些 cdn 版本的 Vue 和 Vue 路由器,它们是官方网站建议的版本: - https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js - https://unpkg.com/vue-router@2.0.0/dist/vue-router.js
HTML
<div id="app">
<h1>{{ message }}</h1>
<nav>
<router-link to="/">Home</router-link>
<router-link to="/about">About</router-link>
<router-link to="/user/John">Name</router-link>
</nav>
<!-- route outlet -->
<!-- component matched by route will render here -->
<router-view></router-view>
</div>
JS
// Route components
const Home = { template: '<div>Home</div>' };
const About = { template: '<div>About</div>' };
const User = { props: ['name'], template: `
<div>
<div>User {{ name }}</div>
<button @click="checkName">Check</button>
</div>`,
methods: {
checkName: function() {
console.log('Params name: ' + this.$route.params.name);
console.log('Props name: ' + this.name);
}
}
};
// Routes for router
const routes = [
{ path: '/', component: Home },
{ path: '/home', redirect: Home },
{ path: '/about', component: About },
{ path: '/user/:name', component: User, props: true }
];
const router = new VueRouter({
routes: routes
});
const app = new Vue({
el: '#app',
data: {
message: 'VueJS Router'
},
router: router
});
当我导航到 'Name' 页面时,静态文本呈现良好,但动态文本无法加载。我添加了一个按钮,它将记录 name 从 props 和 $route.params 到用户的值。单击时发现 props 中的 name 值未定义,但 params 中的 name 值是正确的。为什么是这样?
如果你坚持使用 VueRouter@2.0.0 或更低版本:
您期望的 name
不是作为道具传递的,而是作为路由参数传递的,cf. Dynamic route matching.
您需要按照以下方式从您的模板访问它:$route.params.name
。
您也可以使用计算值。
如果可以更新VueRouter
正如另一个答案中所述,并且根据 release note of VueRouter@2.2.0,将路由参数作为道具传递仅在 v2.2.0 中引入,您使用的是 v2.0.0。如果您想使用道具,您需要更新到(至少)v2.2.0。
Vue Router 安装页面上提供的 CDN link 已过时。而不是:
https://unpkg.com/vue-router@2.0.0/dist/vue-router.js
使用:
https://unpkg.com/vue-router@3.0.1/dist/vue-router.js
此处提供答案: https://forum.vuejs.org/t/why-is-component-props-undefined-vue-router/34929/5