Vue $route 未定义
Vue $route is not defined
我正在学习 Vue 路由器。我想在不使用模板文件中的 <router-link>
的情况下进行编程导航。
我的路由器和视图:
router = new VueRouter({
routes: [
{path : '/videos', name: 'allVideos', component: Videos },
{path : '/videos/:id/edit', name: 'editVideo', component: VideoEdit },
]
});
new Vue({
el: "#app",
router,
created: function(){
if(!localStorage.hasOwnProperty('auth_token')) {
window.location.replace('/account/login');
}
router.push({ name: 'allVideos' })
}
})
所以默认情况下我推送到 'allVideos' 路由,在该组件内部我有一个按钮和重定向到 ''editVideo' 的方法
按钮:
<button class="btn btn-sm btn-warning" @click="editVideo(video)">Edit</button>
方法:
editVideo(video) {router.push({ name: 'editVideo', params: { id: video.id } })},
它工作正常。但是,当我尝试使用 $route.params.id
在 VideoEdit 组件中获取 id 时,出现错误 Uncaught ReferenceError: $route is not defined
可能是因为我现在没有使用 npm,只是 Vue 和 Vuerouter 的 cdn 版本。任何解决方案?谢谢!
更新: 顺便说一句,在 Vue 开发工具中,我在组件中看到了 $route 实例
更新:
var VideoEdit = Vue.component('VideoEdit', {
template: ` <div class="panel-heading">
<h3 class="panel-title">Edit {{vieo.name}}</h3>
</div>`,
data() {
return {
error: '',
video: {},
}
},
created: function () {
console.log($route.params.id);
},
})
我们找到了解决方案,需要在组件内部使用 this.$route
除了 $route
如果您使用的是 vue v2 和 vue-router v2,那么在 vue-cli 中生成样板文件方式来访问路由器,例如from组件是导入路由器(在router/index.js中导出)
<script>
import Router from '../router';
然后在您的代码中,您可以使用路由器函数,例如:
Router.push('/contacts'); // go to contacts page
import Vue from 'vue'
import Router from 'vue-router';
Vue.use(Router)
const router = new VueRouter({
routes: [
{path : '/videos', name: 'allVideos', component: Videos },
{path : '/videos/:id/edit', name: 'editVideo', component: VideoEdit },
]
});
new Vue({
el: "#app",
router,
created: function(){
if(!localStorage.hasOwnProperty('auth_token')) {
window.location.replace('/account/login');
}
this.$router.push({ name: 'allVideos' });
}
})
就我而言,这些以前的解决方案对我不起作用,所以
我做了以下
<script>
import Router from '../router';
然后在你的代码中你可以使用这个
this.$router.push('/contacts');
添加this
后报错的人
TypeError: Cannot read property '$route' of undefined
我们需要使用 常规函数 而不是 ES6 箭头函数
data: function() {
return {
usertype: this.$route.params.type
};
},
这对我有用。
对于那些尝试使用 es6 箭头函数的人,@Kishan Vaghela 的另一种替代方法是:
methods: {
gotoRegister() {
this.$router.push('register')
}
}
如
的第一个答案中所述
我正在学习 Vue 路由器。我想在不使用模板文件中的 <router-link>
的情况下进行编程导航。
我的路由器和视图:
router = new VueRouter({
routes: [
{path : '/videos', name: 'allVideos', component: Videos },
{path : '/videos/:id/edit', name: 'editVideo', component: VideoEdit },
]
});
new Vue({
el: "#app",
router,
created: function(){
if(!localStorage.hasOwnProperty('auth_token')) {
window.location.replace('/account/login');
}
router.push({ name: 'allVideos' })
}
})
所以默认情况下我推送到 'allVideos' 路由,在该组件内部我有一个按钮和重定向到 ''editVideo' 的方法 按钮:
<button class="btn btn-sm btn-warning" @click="editVideo(video)">Edit</button>
方法:
editVideo(video) {router.push({ name: 'editVideo', params: { id: video.id } })},
它工作正常。但是,当我尝试使用 $route.params.id
在 VideoEdit 组件中获取 id 时,出现错误 Uncaught ReferenceError: $route is not defined
可能是因为我现在没有使用 npm,只是 Vue 和 Vuerouter 的 cdn 版本。任何解决方案?谢谢!
更新: 顺便说一句,在 Vue 开发工具中,我在组件中看到了 $route 实例
更新:
var VideoEdit = Vue.component('VideoEdit', {
template: ` <div class="panel-heading">
<h3 class="panel-title">Edit {{vieo.name}}</h3>
</div>`,
data() {
return {
error: '',
video: {},
}
},
created: function () {
console.log($route.params.id);
},
})
我们找到了解决方案,需要在组件内部使用 this.$route
除了 $route
如果您使用的是 vue v2 和 vue-router v2,那么在 vue-cli 中生成样板文件方式来访问路由器,例如from组件是导入路由器(在router/index.js中导出)
<script>
import Router from '../router';
然后在您的代码中,您可以使用路由器函数,例如:
Router.push('/contacts'); // go to contacts page
import Vue from 'vue'
import Router from 'vue-router';
Vue.use(Router)
const router = new VueRouter({
routes: [
{path : '/videos', name: 'allVideos', component: Videos },
{path : '/videos/:id/edit', name: 'editVideo', component: VideoEdit },
]
});
new Vue({
el: "#app",
router,
created: function(){
if(!localStorage.hasOwnProperty('auth_token')) {
window.location.replace('/account/login');
}
this.$router.push({ name: 'allVideos' });
}
})
就我而言,这些以前的解决方案对我不起作用,所以 我做了以下
<script>
import Router from '../router';
然后在你的代码中你可以使用这个
this.$router.push('/contacts');
添加this
后报错的人
TypeError: Cannot read property '$route' of undefined
我们需要使用 常规函数 而不是 ES6 箭头函数
data: function() {
return {
usertype: this.$route.params.type
};
},
这对我有用。
对于那些尝试使用 es6 箭头函数的人,@Kishan Vaghela 的另一种替代方法是:
methods: {
gotoRegister() {
this.$router.push('register')
}
}
如