2016-07-18 7 views
1

私はIonicとAngular JSの新機能です。 ng-repeatディレクティブでコレクション(配列)を更新しようとしています。
これは私のコードです。角度/イオン:ng-repeatでの更新ビューが配列にバインドされています

VIEW:

<div ng-repeat="e in testList">...</div> 

CONTROLLER:

.controller('TestCtrl', function ($scope, $stateParams) { 
    var param1 = $stateParams.param1; 
    $scope.testList = TestFactory.getTest(param1); 
}); 

FACTORY

オブジェクトtestlistというは、 'カスタム・トリガー' の火災後に移入され
.factory('TestFactory', ['Auth', function (Auth) { 
    auth = Auth.get(); 

    listObj = {}; 

    auth.on('custom-trigger', function(index, value){ 
     addElement(index, value); 
    }); 

    function addElement(index, value){ 
     var obj = {} 
     obj.test=(value);   
     listObj[index].push(obj); 
    }; 

    var TestFactory = { 

     getTest: function (index) { 
      if (typeof listObj[index] == 'undefined') 
       listObj[index] = []; 
      return listObj[index]; 
     } 
    }; 

    return TestFactory; 

}]) 

:私が見ることができるので、それが正常に動作しますログの新しい値
このトリガーはアプリケーションの開始時に(多くの時間と毎回正常に動作します)、サーバーの通知後に発生します(ここで問題が発生します!!)。
ビューは更新されないという問題があります。データバインディングの問題だと思います。

答えて

1

コントローラに通知する必要がある可能性があります。addElementがトリガーされている可能性があります。それは動作しません

工場

.factory('TestFactory', ['$rootScope', 'Auth', function ($rootScope, Auth) { 

    // ... 

    function addElement(index, value){ 
     var obj = {} 
     obj.test=(value);   
     listObj[index].push(obj); 

     // notify the app that `addElement` has occurred 
     $rootScope.$broadcast('elementAdded'); 
    }; 

    // ... 

}]) 

コントローラ

.controller('TestCtrl', function ($scope, $stateParams) { 
    var param1 = $stateParams.param1; 
    $scope.testList = TestFactory.getTest(param1); 

    // listen for elementAdded event; re-get testList 
    $scope.$on('elementAdded', function(){ 
     $scope.testList = TestFactory.getTest(param1); 
    }); 
}); 
+0

:別の$broadcastとリスナーを追加してみてください。イベントの仕事と私が行う場合:console.log(TestFactory.getTest(param1))私は新しい値を見ることができますが、ビューは更新されません。 – enfix

+0

$ scopeを使用している場合$ apply();あなたのソリューションでは、それは働いています: $スコープ$で( 'elementAdded'、function(){ $ scope.testList = TestFactory.getTest(param1); $ scope。$ apply(); }); しかし、私は最高の解決策だとは思わない..... – enfix

+0

@enfix私は実際に '$ apply'の中で' $ apply'を使わなければならないことに驚いています。 'TestFactory.getTest'が呼び出すたびに同じオブジェクトへの参照を返すためかもしれません。それは私の最高の推測です。 – SteamDev

関連する問題