当使用Vue Router处理/foo/:val
这样的路由时,你必须添加一个观察器来对参数变化做出React。这会导致在URL中有参数的所有视图中出现一些烦人的重复代码。
这可能类似于以下示例:
export default {
// [...]
created() {
doSomething.call(this);
},
watch: {
'$route' () {
doSomething.call(this);
}
},
}
function doSomething() {
// e.g. request API, assign view properties, ...
}
有没有其他方法可以克服这个问题?created
和$route
的处理程序可以合并吗?组件的重用可以禁用吗?这样就不需要监视器了吗?我使用的是Vue 2,但这可能对Vue 1也有意义。
3条答案
按热度按时间mec1mxoz1#
由于GitHub的问题,我刚刚找到了一个可能的答案,如下所示。
可以使用
key
属性(也用于v-for
)让Vue跟踪视图中的更改。要使其工作,必须将该属性添加到router-view
元素中:将此组件添加到视图中后,就不再需要查看
$route
了,相反,Vue.js将创建一个全新的组件示例,并调用created
回调函数。然而,这是一个全有或全无的解决方案。它似乎在我目前正在开发的小应用程序上工作得很好。但它可能会影响其他应用程序的性能。如果您真的希望仅对某些路线禁用视图的重用,您可以考虑基于路线设置
key
的值。但我真的不喜欢这种方法。hkmswyz62#
我在
router-view
组件上使用了这个没有:key
属性的变体。routes.js:
view.vue
在组件内部,我使用config作为属性。在我的例子中,React性被保留,并且组件会根据同一URL内的参数变化自动更新。
2mbi3lxu3#
vue3和脚本设置:
在进口方面: