AngularJS:嵌套数组和视图更新

时间:2014-06-18 14:38:58

标签: angularjs angularjs-scope

ArrayArray内的$scope更新后,我在更新视图时遇到问题。

首先,我检查数组成员是否已存在:

$scope.myArray = [];
if(typeof $scope.myArray[someIndex] == 'undefined') {
  $scope.myArray[someIndex] = {
    name: someName,
    data: []
  };
}

然后按下$scope.myArray[someIndex].data

$scope.myArray[someIndex].data.push(dataContent);

此时视图不会更新。

当然,如果我直接推到$scope.myArray那就可以了。有什么建议吗?

修改:小提琴here

3 个答案:

答案 0 :(得分:1)

它看起来比它简单。

基于响应here我正在设置一个允许设置字符串键的关联数组。如果将数组声明为=[],则无法将字符串设置为键。

所以我只是将我的声明$scope.myArray=[]更改为$scope.myArray={}并且瞧,它有效。

答案 1 :(得分:0)

尝试:

if(typeof $scope.myArray[someIndex] == 'undefined') {
   $scope.$eval(function(){
     $scope.myArray[someIndex] = {
       name: someName,
       data: []
     };
     $scope.myArray[someIndex].data.push(dataContent);
   });       
}

答案 2 :(得分:0)

这有效:

HTML,

<div ng-app>
    <div ng-controller="NestedCtrl">
        <article ng-repeat="member in myArray">
            {{member.name}}
            <article ng-repeat="next in member.data">
                {{next.nested}}
            </article>
        </article>
    </div>
</div>

Angular JS:

function NestedCtrl($scope) {

    $scope.myArray = [];

    var callMe = function(){
      if(typeof $scope.myArray[0] == 'undefined') {
          $scope.myArray[0] = {
              name: 'Hello',
              data: []
          };
      }

      $scope.myArray[0].data.push({nested : 'yay'});   
    }

    callMe();
}