延迟摘要,直到Firebase .set()。then()完成

时间:2018-04-19 13:03:00

标签: angularjs promise

这可能更像是一种承诺误解,但我仍然处在一种情况,即我在指令子控制器函数中调用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()?这是我认为描述我的问题的图片。

enter image description here

1 个答案:

答案 0 :(得分:1)

$ scope。$ apply()或$ rootScope。$ apply()

只是为了获得知识,您可以查看角度来源,看看$timeoutngClickngBlur和其他指令后,总是调用$apply。这就是为什么通常你不需要手动调用它。