我想设置一个promise,然后将其放入指令中(使用数据绑定'='属性类型)并then
在指令中执行魔术,但是将promise作为属性传递似乎导致promise被解析为undefined
,因此then
(和任何其他承诺功能)不可用。
2 回答
我怀疑这是由于这个特定的调整:
$q Promise 被 Angular 模板引擎识别,这意味着在模板中,您可以将附加到范围的 Promise 视为结果值 - angular $q docs
这实质上导致在模板中将 promise 转换$$v
为 promise 用来存储结果值的值,并且在链接阶段这可能仍然是未定义的 - 转换后的值(即未定义),而不是 promise 本身然后传递给指令。
解决方法是不要使用 Promise 本身作为传递给指令的属性,而是使其成为父对象的一部分:父对象不会有 $q/template 引擎魔法运行,因此您将能够深入了解父级的承诺并then
从那里访问功能。
有关示例,请参见http://jsfiddle.net/cebjyre/95sjT/ - 取消注释第 32 行将导致失败,因为此时顶级承诺实际上不再是承诺,而第 17 行的二级承诺工作正常
谢谢。我已将此添加到 Angular 文档中。
http://docs.angularjs.org/api/#comment-984109158
要实现这一点,请将您的承诺包装在父项中: $scope.myDirectiveAtrribute = {promise: deferred.promise} 然后在指令中访问承诺
$scope.myDirectiveAtrribute.promise.then(function(){});