2016-07-27 8 views
0

私は以下のように角度1.5のコントローラにメソッドを持っていますが、私はファクトリ自体にajax呼び出しをリファクタリングしたいと思いますが、約束に問題があります。私のコントローラの中で私がちょうど私が下に示したようなメソッドを呼び出すことができるポイントにしようとしています。これは可能ですか?私は、コントローラのコード内の...成功(関数(...)を有する避けるためにしようとしている。ajax約束から値を返す方法

すべてのヘルプははるかに高く評価。

vm.member = someFactory.getMember(vm.id); 

に移動しようとすると、 既存の作業コントローラコード

vm.myMethod = myMethod; 
... 

function myMethod() { 
    someFactory.getMember(vm.id).success(function(response) { 
     vm.member = response; 
    }); 
} 

Iは、工場内にgetMethodラインを移動しますレスポンスには明らかに値が設定されますが、コントローラに戻るとすぐに、ファクトリからの戻り値が応答であっても結果は未定義です。私はこれが約束のためだと知っていますが、私が紛失しているデザインパターンやこれを行うきれいな方法があります。私の現在のアプローチを使用して、私のコントローラは.success(function()...)に分かれています。

多くの感謝!

答えて

0

この手順は、プロミスラッピングと呼ばれます。 successが廃止されており、thenに置き換える必要がありますという事実のほかに

someFactory.getMember(vm.id).then(function(response) { 
    var data = res.data; 
    ... 
}); 

コントローラでこれを持っているために、完全に大丈夫です。

このパターンの代わりに、自己充填物体(ngResource $resourceがないもの)を返すことである。

function getMember(...) { 
    var data = {}; 
    $http(...).then(function (response) { 
    // considering that response data is JSON object, 
    // it can replace existing data object 
    angular.copy(data, response.data); 
    }); 
    return data; 
} 

この場合、コントローラは即座にオブジェクトへの参照を取得することができ、およびオブジェクトのプロパティのバインディング{{ vm.member.someProperty }}は、応答に応じて更新されます。

パターンはオブジェクト(および配列)に限定され、スカラー値はオブジェクトでラップする必要があります。

関連する問題