页面并不总是识别具有ES6承诺的ng-if / new $范围变量

时间:2017-03-19 06:29:27

标签: javascript angularjs firebase angular-promise es6-promise

奇怪的问题 -

因此,我运行加载用户个人资料的代码。在代码期间,它会检查查看个人资料的人是否为“朋友”。如果是,它使用NG-IF并设置$ scope.button以获得新文本。

然而 - 通常我需要多次刷新页面以供Angular / http-server查看。我可以在console.log中看到连接是正确的,但问题仍然存在。如果我不需要刷新,我会看到“闪烁”,并在页面加载时观察范围的变化。

有没有办法阻止这种情况?

我试过$ scope.apply();. (从火基中提取数据)

1 个答案:

答案 0 :(得分:2)

由于承诺来自AngularJS框架之外,框架不知道模型的更改并且不更新DOM。使用$q.when将外部承诺转换为Angular框架承诺。

var ref = x.child(userLoggedIn).child(allUsersArray[i].uid)
var refPromise = $q.when(ref.once('value'));

使用$ q与AngularJS框架及其摘要周期正确集成的服务承诺。

  

$ q.when

     

将可能是值的对象或(第三方)随后的承诺包含到$q承诺中。当您处理可能会或可能不是承诺的对象,或者承诺来自不可信任的源时,这非常有用。

     

-- AngularJS $q Service API Reference - $q.when

我使用的是Promises.all,$ q似乎修复了这种行为。

在幕后,$q.all对对象或数组中的每个promise使用$q.when。这也将外部承诺转换为Angular框架承诺。