AngularJS承诺不会绑定到1.2中的模板

问题描述

1.2.0-rc3中有更改,包括您提到的更改:

凶猛抽搐 修复了$ compile和$ animate中的许多高优先级问题,并为1.2铺平了道路。此版本还 更改,在某些情况下,这些更改可能会破坏您的指令和模板。请确保阅读更改日志以了解这些更改,并了解如何在需要时迁移代码。有关此版本中的完整详细信息,请参见changelog

更改日志中有描述:

* 由于5dc35b52的缘故,一般而言 $ parse和模板将 。此功能已被弃用,如果绝对需要,可以在过渡期间通过$parseProvider.unwrapPromises(true)api 重新启用。 * 由于b6a37d11,在rc.2中添加功能(如果值是promise,则从函数解开返回值)(如果启用了promise unwrapping-请参见上一点),由于破坏了一种流行的用法模式而被还原。

解决方法

升级到1.2后,我的服务返回的promise行为有所不同…简单服务myDates:

getDates: function () {
           var deferred = $q.defer();

            $http.get(aGoodURL).
                 success(function (data,status,headers,config) {
                     deferred.resolve(data);  // we get to here fine.
            })......

在早期版本中,我可以在控制器中执行以下操作:

$scope.theDates = myDates.getDates();

从getDates返回的promise可以直接绑定到Select元素。现在这不起作用,我被迫在控制器中对promise进行回调,否则数据将无法绑定:

$scope.theDates = matchDates.getDates();
$scope.theDates.then(function (data) {
      $scope.theDates = data;  // this wasn't necessary in the past

文档仍然说:

$ qpromise由模板引擎以角度识别,这意味着在模板中,您可以将附加到作用域的promise视为它们的结果值。

他们(承诺)在Angular的旧版本中工作,但是在1.2 RC3中,我所有的简单服务中的自动绑定都失败了……关于我可能做错了的任何想法。