22

我想设置一个promise,然后将其放入指令中(使用数据绑定'='属性类型)并then在指令中执行魔术,但是将promise作为属性传递似乎导致promise被解析为undefined,因此then(和任何其他承诺功能)不可用。

4

2 回答 2

16

我怀疑这是由于这个特定的调整:

$q Promise 被 Angular 模板引擎识别,这意味着在模板中,您可以将附加到范围的 Promise 视为结果值 - angular $q docs

这实质上导致在模板中将 promise 转换$$v为 promise 用来存储结果值的值,并且在链接阶段这可能仍然是未定义的 - 转换后的值(即未定义),而不是 promise 本身然后传递给指令。

解决方法是不要使用 Promise 本身作为传递给指令的属性,而是使其成为父对象的一部分:父对象不会有 $q/template 引擎魔法运行,因此您将能够深入了解父级的承诺并then从那里访问功能。

有关示例,请参见http://jsfiddle.net/cebjyre/95sjT/ - 取消注释第 32 行将导致失败,因为此时顶级承诺实际上不再是承诺,而第 17 行的二级承诺工作正常

于 2013-06-18T02:18:27.300 回答
6

谢谢。我已将此添加到 Angular 文档中。

http://docs.angularjs.org/api/#comment-984109158

要实现这一点,请将您的承诺包装在父项中: $scope.myDirectiveAtrribute = {promise: deferred.promise} 然后在指令中访问承诺

$scope.myDirectiveAtrribute.promise.then(function(){});

于 2013-08-01T11:20:51.073 回答