Подтвердить что ты не робот

Как передать promises в качестве атрибутов директивы в Angular

Я хотел бы дать обещание, а затем бросить его в директиву (используя тип атрибута databinding '=') и сделать магию then в директиве, но, по-видимому, передача обещания как атрибута в обещании, которое разрешено как undefined, поэтому then (и любая другая функциональность обещания) недоступна.

4b9b3361

Ответ 1

Я подозреваю, что это связано с этой конкретной настройкой:

$q promises распознаются движком шаблонов в angular, что означает, что в шаблонах вы можете рассматривать promises, прикрепленные к области видимости, как если бы они были результирующими значениями - angular $q docs

и это по существу приводит к тому, что обещание преобразуется внутри шаблона в значение $$v, которое обещание использует для хранения результирующего значения, и на этапе компоновки это, вероятно, будет undefined - преобразованное значение ( т.е. undefined), а не само обещание передается в директиву.

Обходной путь заключается не в том, чтобы использовать само обещание как атрибут, переданный в директиву, а для того, чтобы сделать его частью родительского объекта: родительский объект не будет запускать мануал за $q/template, и поэтому вы будете иметь возможность свернуться с обещанием от родителя и получить доступ к функции then оттуда.

См. http://jsfiddle.net/cebjyre/95sjT/ для примера - строка с неудовлетворением 32 приведет к сбою из-за обещания верхнего уровня, фактически не являющегося обещанием в этот момент, тогда как обещание второго уровня в строке 17 работает отлично

Ответ 2

Спасибо. Я добавил это в Angular docs.

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

Чтобы добиться этого, положите свое обещание в родителя: $scope.myDirectiveAtrribute = {обещание: отложенный.промисс}, а затем в директива доступа к обещанию

$scope.myDirectiveAtrribute.promise.then(функция() {});