Javascript 从路由器设置时未更新道具

Javascript 从路由器设置时未更新道具,javascript,vue.js,vue-router,watch,Javascript,Vue.js,Vue Router,Watch,当我在路由定义中设置组件道具时,观察者不工作,视图也永远不会更新 在本例中,更新工作正常: const Home={template:'Home'} 常数测试={ 模板:“测试:{{nb}}+1”, 道具:{nb:Number}, 方法:{ addOne(){ 这个,nb++ } } } 常量路由器=新的VueRouter({ 路线:[ {path:'/',组件:Home}, {name:'test',path:'/test/:nb',component:test,props:true} ]

当我在路由定义中设置组件道具时,观察者不工作,视图也永远不会更新

在本例中,更新工作正常:
const Home={template:'Home'}
常数测试={
模板:“测试:{{nb}}
+1”, 道具:{nb:Number}, 方法:{ addOne(){ 这个,nb++ } } } 常量路由器=新的VueRouter({ 路线:[ {path:'/',组件:Home}, {name:'test',path:'/test/:nb',component:test,props:true} ] }) 新Vue({ 路由器, el:“#应用程序” })

/家
/试验

计数器对象不会反应,因此不会检测到属性更改。将对象作为道具传递不会增加反应性

我刚刚更改了您示例中的一行:

props:(route)=>({counter:Vue.observable(new counter(route.params.nb))),
将对象传递到
Vue.observeable
将应用反应性

注意,“应用反应性”意味着重写所有属性以使用getter和setter。在这里给出的简单示例中,这仅仅意味着
属性,应该可以。Vue只能重写它可以看到的属性,因此隐藏在闭包中的任何数据都无法访问

const Home={template:'Home'}
常数测试={
模板:“测试:{{counter.value}}
+1', 道具:{counter:Object}, 方法:{ addOne(){ 这个计数器值++ console.log('new value:'+this.counter.value) } } } 班级计数器{ 构造函数(值){ this.value=value } } 常量路由器=新的VueRouter({ 路线:[ {path:'/',组件:Home}, { 名称:'测试', 路径:'/test/:nb', 道具:(route)=>({counter:Vue.observable(新计数器(route.params.nb))}), 组件:测试 } ] }) 新Vue({ 路由器, el:“#应用程序” })

/家
/试验

谢谢您的解释。我找不到关于这种行为的任何文档。对于单向数据流,正如我在帖子中所说,我在示例中这样做是为了保持简单。但在我的例子中,对象是通过IPC在后台更新的。