【发布时间】:2018-12-11 19:02:44
【问题描述】:
我有一个带有两个观察者的 Vue 实例:
watch: {
zone:function(zone) {
console.log('Zone watcher');
this.route = {};
},
route:function(route) {
console.log('Route watcher');
if(Object.getOwnPropertyNames(route).length === 0) {
var _this = this;
axios.get(route.url).then(function(response) {
_this.tracks = response.data;
});
} else this.tracks = {};
}
},
当用户选择一个区域时,路线(和轨迹)会被重置。当用户选择路线时,会加载轨迹;
我有一个组件接收zone 和tracks 作为道具,还有两个内部观察者,当这些道具中的任何一个发生变化时,它们会执行一些独立的操作。
我还有一个方法可以改变两个变量:
jump:function(path) {
var parts = path.split(',');
this.zone = this.ZONES[parts[0]];
this.route = this.zone.routes[parts[1]];
},
问题是route 的观察者首先被触发,然后zone 的观察者更改route 值再次触发其观察者,将tracks 值重置为空对象。
有没有办法定义观察者必须被触发的顺序?
【问题讨论】:
-
不要改变观察者内部的其他观察变量 - 改用方法。您还可以在观察者中使用
axios来使用异步服务器调用 - 另一个禁忌。将事物拆分为不同的块,并一个接一个地调用它们(例如使用 Promise)
标签: javascript vue.js vuejs2 watch