问题描述
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中,我所有的简单服务中的自动绑定都失败了……关于我可能做错了的任何想法。