22

プロミスを設定し、それをディレクティブにスローして(データバインディング「=」属性タイプを使用)then、ディレクティブ内で魔法を実行したいのですが、プロミスを属性として渡すと、プロミスが次のように解決されるようですundefinedであるため、then(およびその他の promise 機能) は使用できません。

4

2 に答える 2

16

これは、次の特定の調整によるものと思われます。

$q promise は、Angular のテンプレート エンジンによって認識されます。つまり、テンプレートでは、スコープにアタッチされた promise を結果の値であるかのように扱うことができます - angular $q docs

これにより、プロミスはテンプレート内で$$v結果の値を保存するためにプロミスが使用する値に変換されます。リンク段階では、プロミス自体ではなく、変換された値 (未定義) のままである可​​能性があります。その後、ディレクティブに渡されます。

回避策は、プロミス自体をディレクティブに渡される属性として使用するのではなく、それを親オブジェクトの一部にすることです: 親オブジェクトは $q/template エンジン マジックを実行しないため、次のことが可能になります。親から promise にドリルダウンし、thenそこから機能にアクセスします。

例についてはhttp://jsfiddle.net/cebjyre/95sjT/を参照してください- 32行目のコメントを外すと、その時点でトップレベルのプロミスが実際にはプロミスでなくなるため、失敗が発生しますが、17行目の2番目のレベルのプロミスは正常に機能します

于 2013-06-18T02:18:27.300 に答える
6

ありがとう。これを Angular ドキュメントに追加しました。

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

これを達成するには、プロミスを親でラップします: $scope.myDirectiveAtrribute = {promise: deferred.promise} そして、ディレクティブでプロミスにアクセスします

$scope.myDirectiveAtrribute.promise.then(関数(){});

于 2013-08-01T11:20:51.073 に答える