javascript - メリット - 高階関数 python



Angular テンプレートコール関数が約束を返すことができるか (2)

Angularの$ qドキュメントには、 "$ q約束はテンプレートエンジンによって認識されているので、テンプレートでは、スコープに添付された約束を結果の値のように扱うことができます。"

Angularのビューテンプレートを使用すると、式を評価することができます。つまり、スコープから公開された関数を呼び出すことができます。

ビューテンプレートは、実際の値、実際の値に解決する約束、実際の値を返す関数を参照できますが、 {}を常にビューテンプレートにレンダリングする約束を返す関数は参照できません。

はこの事例を使ってバイブルを作っ

誰かがより良いやり方をすることができますか、正しい方向に私を操縦する

(ビューテンプレートの関数を使用するのは悪い考えですが、関数を呼び出すことなく関数が変更されているかどうかをAngularが知ることはできないため、この関数では別の問題があります。私はこれらの2つの 質問を見てきましたが、どちらの場合でも、推奨される答えはpromiseを使用してスコープの通常のプロパティを変更し、ビューテンプレートに約束の代わりに通常のプロパティを表示させることでした。基本的に私はFlaskRailsに url_forのようなものを書こうとしています 。)私が使用するためには、値を計算するためのパラメータをいくつか用意したいと思います。


Answer #1

約束は将来の値、通常は非同期操作の将来の結果を表し、この値が利用可能になったとき、またはエラーが発生したときに何が起こるかを定義することができます。

参照

var promise = asyncFunction(parameters); 

promise.then( 
 function (result) { 
 // Do Something with the result 
 }, 
 function (error) { 
 // Handle error (exception, etc). 
 }); 

ユーティリティメソッド$q.when()を使用して、任意の値を約束で$q.when()ことができます。

  • $ q.when(約束)→約束
  • $ q.when(非プロミス)→新しい約束
  • 指定された値nonPromiseに非同期に解決されます。

==================

あなたの例では:

HTML

<div ng-app ng-controller="testController">
    <p>Direct property: {{ property }}</p>
    <p>Function returning property: {{ getProperty() }}</p>
    <p>Direct promise: {{ promise }}</p>
    <p>Function returning promise: {{ out }}</p>
</div>

JS

function testController($scope, $q) {
    var deferred = $q.defer();
    deferred.resolve('some lazy text');
    $scope.promise = deferred.promise;

    $scope.out = $scope.promise.then(function (result) {
        console.log(result);
        return result;
    });


    $scope.property = 'some text';
    $scope.getProperty = function () {
        return $scope.property;
    };
}

デモフィドル


Answer #2

私は確かに確信していませんが、約束している物を財産として返すと、それは機能します。 (フィドル)

var deferred2 = $q.defer();
$scope.po = { promise: deferred2.promise };
$scope.getPo = function() {
    return $scope.po;
};

$timeout(function() {
    deferred2.resolve('some lazy text');
}, 2000);

HTML:

<p>Function returning promise (object): {{ getPo().promise }}</p>




promise