我怀疑这是由于这个具体的调整:
$q promises are recognized by the templating engine in angular,which means that in templates you can treat promises attached to a scope as if they were the resulting values
– 07000
这实际上导致了承诺在模板中转换为承诺用于存储结果值的$$ v值,并且在链接阶段,这可能仍然是未定义的 – 转换的值(即未定义),而不是承诺本身然后被传递到指令中。
解决方法是不将promise本身用作传递给该指令的属性,而是将其作为父对象的一部分:父对象不会有$ q / template引擎魔法运行,因此您可以从父母深入到承诺,然后从那里访问功能。
参见http://jsfiddle.net/cebjyre/95sjT/的一个例子 – 取消注释行32将导致由于顶级承诺失败,不再实际上是在这一点上的承诺,而第17级承诺在第17行工作正常