AngularJS – 绑定/观察返回promise的函数
我在AngularJS
github上发布了
an issue,但它似乎没有得到很多关注,我自己无法修复它,因为它是一个非常低级别的问题,所以我认为是时候寻找一个解决方法.
Angular允许您将一个promise(或带有.then(…)函数的任何东西)放入您的范围,一旦解析,所有$watches和绑定到该promise的任何内容都将使用已解析的值.当您使用函数返回promise时会出现问题,因为它不适用 – 它像普通对象一样处理. 例如: var helloDef = $.Deferred(); $scope.hello = helloDef.promise(); $scope.getHello = function() { return $scope.hello; }; $timeout(function() { helloDef.resolve('Hello!'); },1000); Fiddle 这里使用ng-bind =“hello”工作正常并输出Hello!,但ng-bind =“getHello()”输出[object Object],因为内部$watch返回promise对象.使用$q而不是$.Deferred工作方式相同. 在我的实际代码中,我在第一次调用函数时创建了promise,所以我不能只是预先做出承诺并在范围内引用它. 我还需要它不仅仅是ng-bind,所以制作我自己的绑定指令来正确处理这种情况是不可行的. 有人有主意吗?如果数据没有得到解决,我现在正在返回承诺,如果有数据,我正在返回实际结果,但这很难处理.任何与数据绑定的内容都会在加载数据时短暂地产生奇怪的副作用,例如使用promise对象而不是使用已解析的值创建元素的ngRepeat. 谢谢. 更新:拉请求:https://github.com/angular/angular.js/pull/3605 更新2:为了将来参考,自动承诺展开已在1.2 brach中弃用. 解决方法
对于某些事情,我使用$resource.如果我需要等待它,$然后效果很好:
var r = $resource...get... var p = r.$then... 否则,我构建自己的资源类对象,这不是一个承诺,但有一个我可以等待的承诺. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |