Vue.js 使用Vue路由器响应参数更改的最佳实践

Vue.js 使用Vue路由器响应参数更改的最佳实践,vue.js,vuejs2,vue-router,Vue.js,Vuejs2,Vue Router,当将Vue路由器与/foo/:val等路由一起使用时,您必须向其添加观察者。这会导致在URL中包含参数的所有视图中出现令人讨厌的重复代码 这可能类似于以下示例: export default { // [...] created() { doSomething.call(this); }, watch: { '$route' () { doSomething.call(this); }

当将Vue路由器与
/foo/:val
等路由一起使用时,您必须向其添加观察者。这会导致在URL中包含参数的所有视图中出现令人讨厌的重复代码

这可能类似于以下示例:

export default {
    // [...]
    created() {
        doSomething.call(this);
    },
    watch: {
        '$route' () {
            doSomething.call(this);
        }
    },
}

function doSomething() {
    // e.g. request API, assign view properties, ...
}

有没有其他办法克服这个问题?创建的
$route
更改的处理程序是否可以合并?是否可以禁用组件的重用,以便根本不需要观察者?我正在使用Vue 2,但这对Vue 1来说可能也很有趣。

我刚刚发现的一个可能的答案是,感谢a

可以使用也用于
v-for
的来让Vue跟踪视图中的更改。为此,必须将该属性添加到
路由器视图
元素:

<router-view :key="$route.fullPath"></router-view>

将其添加到视图后,您不再需要查看
$route
。相反,Vue.js将创建组件的全新实例,并调用
created
回调


然而,这是一个全有或全无的解决方案。它似乎在我目前正在开发的小型应用程序上运行良好。但它可能会影响其他应用程序的性能。如果确实希望仅对某些管线禁用视图的重用,可以查看设置
键的值。但是我真的不喜欢这种方法。

Hmm.v1路由器有一个可重用性,但我在v2中没有看到。有趣。@ceejayoz你说得对,它就在那里,但是。好吧,谢谢你,不过我在这些路由组件中有子组件,它们不会被保留。每次我在两个单独安装且仅安装一次的路由组件之间切换时,我看到它们都会发出已安装事件。有没有办法让它们的子组件也保持活动状态?将所有子项折叠到一个上,即使我使用了一个键。谢谢,它在Vue3中仍然可以完美工作