Ответ 1
Я подозреваю, что это связано с этой конкретной настройкой:
$q promises распознаются движком шаблонов в angular, что означает, что в шаблонах вы можете рассматривать promises, прикрепленные к области видимости, как если бы они были результирующими значениями - angular $q docs
и это по существу приводит к тому, что обещание преобразуется внутри шаблона в значение $$v
, которое обещание использует для хранения результирующего значения, и на этапе компоновки это, вероятно, будет undefined - преобразованное значение ( т.е. undefined), а не само обещание передается в директиву.
Обходной путь заключается не в том, чтобы использовать само обещание как атрибут, переданный в директиву, а для того, чтобы сделать его частью родительского объекта: родительский объект не будет запускать мануал за $q/template, и поэтому вы будете иметь возможность свернуться с обещанием от родителя и получить доступ к функции then
оттуда.
См. http://jsfiddle.net/cebjyre/95sjT/ для примера - строка с неудовлетворением 32 приведет к сбою из-за обещания верхнего уровня, фактически не являющегося обещанием в этот момент, тогда как обещание второго уровня в строке 17 работает отлично