这可能更像是一种承诺误解,但我仍然处在一种情况,即我在指令子控制器函数中调用firebaseRef.set(this.myData).then(this.resolve)
。在.then(this.resolve)
中,this.resolve()
函数调用父控制器函数(与'&'绑定),但模型更改不是$digest()
。我尝试使用save()
从$q
返回承诺,但这没有帮助。这是save()
:
this.save = () => {
const chorePath = `chores/${member.$id}/${this.chore.$id}`;
$root.user.$ref.child(chorePath)
.set(this.chore)
.then(this.resolve);
}
};
这是resolve()
绑定的指令
<chore-editor chore="$ctrl.selectedChore"
resolve="$ctrl.choreSaved()"></chore-editor>
然后这是choreSaved()
函数
this.choreSaved = () => {
this.editing = false;
};
this.editing = false;
应隐藏模态弹出窗口,但不会因为$digest()
未触发。下一个$digest()
循环会隐藏模态(通过单击任何模型绑定触发)。有没有一种方法可以构建它以在异步$digest()
调用后允许角度正确.set()
?这是我认为描述我的问题的图片。
答案 0 :(得分:1)
$ scope。$ apply()或$ rootScope。$ apply()
只是为了获得知识,您可以查看角度来源,看看$timeout
,ngClick
,ngBlur
和其他指令后,总是调用$apply
。这就是为什么通常你不需要手动调用它。