我使用广播来检查控制器中的指令是否更改了变量。
这是我的广播的播放方式(有效):
$rootScope.$broadcast(EVENTS.RELOAD, scope.values);
在这里,我在控制器中处理广播:
$scope.$on(EVENTS.RELOAD, reloadCurves);
function reloadCurves(e, data){
console.log(exp.curves);
/* console.log('reload asked : ', data); */
exp.plate.experiments.forEach(function (element) {
if (data[element.well] === true){
exp.curves[element.well] = element;
}
});
console.log(exp.curves);
}
然后在另一个指令中,我检查曲线变量是否随着$ watch改变。该手表也可以工作,当我手动更改变量时,将触发手表。
我的问题很奇怪,在我的reloadCurves中,我有两个console.log,它们总是显示相同的对象,但通常第一个console.log必须输出一个空数组(或与第二个console.log不同的数组)第二个是foreach的结果。
所以有角度的认为曲线变量不会改变,也不要丢下我的第二条指令。
该怎么办?
编辑:
我将我的reloadCurves更改为:
function reloadCurves(e, data){
console.log('reload asked : ', data);
console.log(exp.curves);
// Récuperer toute les experiments cochés (celle en true)
var tab = [];
exp.plate.experiments.forEach(function (element) {
if (data[element.well] === true){
tab[element.well] = element;
}
});
exp.curves = tab;
console.log(exp.curves);
}
所以现在第一和第二个console.log不同,但是曲线上的$ watch不会抛出
答案 0 :(得分:0)
查看代码后,我认为您假设您的forEach循环至少迭代一次或多次。正如您所说的,您同时获得两个console.log
输出,因此问题很简单。您的forEach循环没有任何时间在迭代。只需将控制台日志放入forEach循环中,就不会得到该日志。只要检查一下exp.plate.experiments
中的内容,便可以对其进行修复。
修改
好像您要在角度世界之外更新模型。只需将其包装在$scope.$apply(fn)
function reloadCurves(e, data){
console.log('reload asked : ', data);
console.log(exp.curves);
// Récuperer toute les experiments cochés (celle en true)
$scope.$apply(function() {
var tab = [];
exp.plate.experiments.forEach(function (element) {
if (data[element.well] === true){
tab[element.well] = element;
}
});
exp.curves = tab;
});
console.log(exp.curves);
}