3

$http を使用して ajax でオブジェクトの配列を取得する関数があります。

$scope.getArray = function(page) {
    return $http.get(page).then(function(data) {
        return data.data;
    });
};

私はそれをそのように使用します:

$scope.array = $scope.getArray('somepage');

このコードは実際に機能し、ビューに必要なデータがあります。

ただし、この配列の最後にデータを追加したいと思います。私は試した

$scope.addToArray = function(newItem) {
    $scope.array.push(newItem);
};

しかし、それはうまくいきませんでした。

それを行う方法はありますか?ありがとう。

4

2 に答える 2

1

これを解決するために別のアプローチを選択しました。良くなるかどうかわかりませんが、とにかくここに置きます。

(function(utility) {
    angular.module('app').

    service('data',['$q', function($q) {
      var deferred = $q.defer();
      var data = ['bla', 'bla'];

      //some async $http stuff being done resulting in deferred.resolve(data)

      utility.add = function(stuff) {
        data.push(stuff);
      };

      return deferred.promise;
    }]).

    service('dataService', [function() {

      return {
        add: function(data) {
          utility.add(data);
      };

  }]);
}({}));

基本的に、私の配列に興味があるコントローラーはすべてdata注入され、私の配列に何かを追加することに潜在的に興味があるコントローラーはdataService注入されます。次に、配列に要素をプッシュutilityする関数を含むオブジェクトに対してクロージャーを作成します。addプロミスは元の配列への参照を保持し、元の配列を変更すると解決された値が実際に更新されるため、これは (少なくとも 1.0.8 では) 機能します。

このようにして、 mycontrollerは から完全に分離$httpされ、サーバーからデータが取得される方法に関与する必要はありません。データを依存関係として宣言することによって引き渡されるだけであり、追加される方法を完全に制御できます。サービスはシングルトンですが、コントローラーはシングルトンではないため、データもキャッシュされます。

于 2013-10-26T09:02:32.953 に答える