延迟在Angular 1.2.2版中无法解决

时间:2013-12-01 22:17:48

标签: javascript angularjs deferred

当Google要放慢速度时,请问stackoverflow ...出于某种原因,我无法找到有关此问题的内容:

我阅读了this教程,这导致我this插入。出于某种原因deferred在我刚刚使用yo generator-angular创建的项目中不起作用,即使我直接从plunk复制代码。最后我发现,我正在使用角度版本 1.2.2 ,而插件使用 1.1.5

真正的问题似乎是deferred.resolve无法按预期工作(根本没有)。将plunk中的版本切换为1.2.2后,您可以看到此行为。很奇怪UI 正在使用3个(?)对象进行更新。

编辑:我还发现更改控制器以设置承诺then()功能中的属性可以正常工作。所以1.2.2版本根本不允许直接绑定promises,比如$scope.message = HelloWorld.getMessages()。这是为什么?此承诺的接口也已更改,不再具有always功能。这是原因吗? 我在 grml 之前更喜欢它。

任何人都可以澄清一下吗?

丹尼尔

1 个答案:

答案 0 :(得分:3)

对于1.2版,您的getMessages()方法是一个promise对象,而不是已解析的数据本身。 Angular不再为您自动解包promise对象,因此您需要在回调中访问已解析的数据,如下所示:

HelloWorld.getMessages().then(function(data){
  $scope.messages = data;
});

Here is an updated Plunkr说明了上述变化。这一突破性变化is described in more detail here

  

<强> $解析

     
      
  • 由于5dc35b52,$ parse和模板一般不再存在   自动解包承诺。此功能已被弃用,如果   绝对需要,它可以在过渡期间重新启用   $parseProvider.unwrapPromises(true) api。

  •   由于b6a37d11功能,
  •   在rc.2中添加,如果值,则从函数中返回值   是承诺(如果启用承诺解包 - 见前一点),   由于打破了流行的使用模式而被归还。

  •