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