2

何らかの理由で、スコープ関数から promise を返すと、$q解決時に値が伝播されません。

app.controller('MainCtrl', function($scope, $q) {
    var deferred = $q.defer();
    deferred.resolve("hello");
    var promise = deferred.promise;

    $scope.promiseReturn = function() {
        return promise;
    };
});

そしてビュー:

<body ng-controller="MainCtrl">
    <p>promiseReturn: {{promiseReturn()}}</p>
</body>

このコードの Plunker は次のとおりです。ビューは最終的に次のようになります。

promiseReturn: {}

私の理解では、テンプレート エンジンは$qプロミスをかなり透過的に処理するようです。

4

1 に答える 1

4

$qプロミスはスコープに直接アタッチでき、解決されると、その値によってビューが更新されます (解決された値が使用されます) が、スコープ関数の戻り値にすることはできません

スコープの関数から promise を返す場合、戻り値はそのまま使用されます。promise は object のように見え{then: function() { ... }}、Angular の JSON シリアライザーは関数値を持つキーを無視するため{}、ビューに入るだけです。これを示すプランカーを次に示します

Angular はいくつかの場所でこれを扱います。parse.jsで一部を確認できます( を検索してください.then)。

于 2013-03-18T23:02:35.560 に答える