$router.push 中的参数字段为空
Params field is empty in $router.push
考虑一下:
this.$root.$router.push({
path: '/dashboard',
params: { errors: 'error' },
query: { test: 'test' }
})
我在我的组件中使用它重定向到另一个 URL,但出现了一些错误。问题是当我想访问仪表板组件中的 params
字段时,它是空的。 query
字段效果很好。我正在尝试通过 this.$route.params.errors
.
访问它
您只能将 params
用于 named
路径(我认为)。
示例:
//route (in your router file should have "name")
{ path: '/errors', name: 'EXAMPLE', component: ... }
//navigating
this.$router.push({
name: 'EXAMPLE',
params: { errors: '123' }
});
现在它将在 this.$route.params
中具有正确的值。
如果您不想使用命名路由,您可以试试这个:
ES6
this.$root.$router.push({
path: `/dashboard/${error}`,
query: { test }
})
ES5
this.$root.$router.push({
path: '/dashboard/' + error,
query: { test: 'test' }
})
我在我的一个观点(组件)中遇到了类似的问题。我试图(以编程方式)从 /foo/bar
导航到 /foo/bar/123
,但路由参数稍后在组件中不可用。我的相关导航代码如下所示:
methods: {
save_obj() {
let vm = this;
// Make AJAX call to save vm.my_obj, and on success do:
let v = `${vm.$route.path}/${vm.my_obj.id}`;
console.log("Loading view at path: "+v);
vm.$router.push({ path: v });
},
...
}
它会打印预期的日志(例如,Loading view at path: /foo/bar/112),但是,created()
挂钩中的数据加载不会收到路由参数的值。我失败的 created()
代码如下所示:
created: function() {
console.log("Loading object details.");
let vm = this;
let cid = vm.$route.params.id; // <---- This was the problem
vm.$http.get('api/'+cid)
.then(function (res) {
if (res.data.status == "OK") {
vm.my_obj = res.data.body;
} else {
vm.setStatusMessage(res.data.body);
}
})
.catch(function (error) {
console.log(error);
vm.setStatusMessage("Error: "+error);
});
}
下面引用的 the third note here 中指出了解决方案:
Note: If the destination is the same as the current route and only
params are changing (e.g. going from one profile to another /users/1
-> /users/2), you will have to use beforeRouteUpdate to react to changes (e.g. fetching the user information).
我必须在我的组件中执行以下操作:
将 created()
中的行 let cid = vm.$route.params.id;
更改为 let cid = vm.course.id
然后,将以下内容添加到组件中:
beforeRouteUpdate(to, from, next) {
if (to.params.id) {
this.my_obj.id = to.params.id;
}
// Some other code specific to my app
next();
}
我希望这对遇到类似问题的人有所帮助。
考虑一下:
this.$root.$router.push({
path: '/dashboard',
params: { errors: 'error' },
query: { test: 'test' }
})
我在我的组件中使用它重定向到另一个 URL,但出现了一些错误。问题是当我想访问仪表板组件中的 params
字段时,它是空的。 query
字段效果很好。我正在尝试通过 this.$route.params.errors
.
您只能将 params
用于 named
路径(我认为)。
示例:
//route (in your router file should have "name")
{ path: '/errors', name: 'EXAMPLE', component: ... }
//navigating
this.$router.push({
name: 'EXAMPLE',
params: { errors: '123' }
});
现在它将在 this.$route.params
中具有正确的值。
如果您不想使用命名路由,您可以试试这个:
ES6
this.$root.$router.push({
path: `/dashboard/${error}`,
query: { test }
})
ES5
this.$root.$router.push({
path: '/dashboard/' + error,
query: { test: 'test' }
})
我在我的一个观点(组件)中遇到了类似的问题。我试图(以编程方式)从 /foo/bar
导航到 /foo/bar/123
,但路由参数稍后在组件中不可用。我的相关导航代码如下所示:
methods: {
save_obj() {
let vm = this;
// Make AJAX call to save vm.my_obj, and on success do:
let v = `${vm.$route.path}/${vm.my_obj.id}`;
console.log("Loading view at path: "+v);
vm.$router.push({ path: v });
},
...
}
它会打印预期的日志(例如,Loading view at path: /foo/bar/112),但是,created()
挂钩中的数据加载不会收到路由参数的值。我失败的 created()
代码如下所示:
created: function() {
console.log("Loading object details.");
let vm = this;
let cid = vm.$route.params.id; // <---- This was the problem
vm.$http.get('api/'+cid)
.then(function (res) {
if (res.data.status == "OK") {
vm.my_obj = res.data.body;
} else {
vm.setStatusMessage(res.data.body);
}
})
.catch(function (error) {
console.log(error);
vm.setStatusMessage("Error: "+error);
});
}
下面引用的 the third note here 中指出了解决方案:
Note: If the destination is the same as the current route and only params are changing (e.g. going from one profile to another /users/1 -> /users/2), you will have to use beforeRouteUpdate to react to changes (e.g. fetching the user information).
我必须在我的组件中执行以下操作:
将 created()
中的行 let cid = vm.$route.params.id;
更改为 let cid = vm.course.id
然后,将以下内容添加到组件中:
beforeRouteUpdate(to, from, next) {
if (to.params.id) {
this.my_obj.id = to.params.id;
}
// Some other code specific to my app
next();
}
我希望这对遇到类似问题的人有所帮助。