9

Angular を使用してサーバーから JSON データを取得する必要があります。ユーザーデータとしましょう。私はそのようなサービスを作成しました:

app.service('User', function($http) {
  retrun $http({method: 'GET', url:'/current_user'});
});

そして私のコントローラーで:

app.controller('SomeCtrl', function($scope, User) {
  User.success(function(data) {
    $scope.user = data;
  });
});

それは問題なく動作しますが、ユーザーにいくつかのメソッドを追加したい場合はどうすればよいでしょうか? たとえば、私がやりたいビューで{{user.isAdmin()}}。それは正しいアプローチですか?これらのメソッドはどこに追加できますか?

4

2 に答える 2

3

サービスが常にこのメソッドでオブジェクトを返すようにしたい場合は、次のようにします。

app.service('User', function($http) {
  return $http({method: 'GET', url:'/current_user'}).
         then(function(response) {
           response.data.isAdmin = function() { return true; };
           return response.data;
         });
});

この promise を参照して .then() を使用する将来のコードは、新しいオブジェクトを取得します。詳細については、promise のドキュメントを参照してください。

http://docs.angularjs.org/api/ng .$q

httpPromise で「then」を使用すると、通常の promise に変換されることに注意してください。便利なメソッド「success」と「error」はもうありません。

データ オブジェクトを受け取り、適切なプロパティを割り当てる (またはインスタンスを拡張する) コンストラクター関数を使用して、返すオブジェクトのクラスを作成することをお勧めします。このようにして、次のようなことが簡単にできます

return new User(val);

そして、必要なすべてのメソッドを取得します (プロトタイプなどを使用)。

于 2013-10-10T14:29:48.243 に答える
0

これは、作成したサービスでいくつかの方法で実行できます。

  1. $resource の使用を開始し、応答で変換を使用します:
    http://jsfiddle.net/roadprophet/prtAP/ ...

    transformResponse: 関数 (データ、ヘッダー) {

                    data = {};
                    data.coolThing = 'BOOM-SHAKA-LAKA';
                    return data;
                }  
    

... $resource の使用により、よりクリーンにスケーリングされるため、この方法をお勧めします。

  1. $http で transformResponse をセットアップします: http://jsfiddle.net/roadprophet/bPfcz/

  2. get promise が解決された後に解決される独自の promise を使用しますが、マッピングされたデータを使用します。複数の promise を管理する必要があるため、これはおそらく最も手動で処理する方法です。

于 2013-10-10T14:55:18.247 に答える