角度视图中的数组深表(html)

时间:2015-07-13 20:45:38

标签: angularjs watch

这是我的观点(html):

<my-directive collection="currentData"></my-directive>

这是数据结构:

$scope.currentData = [...
  {
     "name": "lala Page",
     "icon": "icon-docs",
     "sub_data": [
     {
        "name": "1-article",
         "href": "/1-article",
         "icon": "fa fa-pencil"
     },
     {
         "name": "2-article",
         "href": "/2-article",
         "icon": "fa fa-pencil"
     },
     {
        "name": "3-article",
        "href": "/3-article",
        "icon": "fa fa-pencil"
     }
   ...
   ]...
}]

在my-directive中有bind-once元素(在sub_data上)。 如果all数组更改 - 视图已更改, 但是当我更改sub_data时,视图不会更新。 任何想法,如何使集合受到sub_data变化的影响?

(我确实希望尽可能少地使用观察者)

修改

添加my-directive代码:

angular.module('my_module',[]).directive('myDirective', function(){
return {
    scope:{
        collection: '='
    },
    replace: true,
    template: ['<li my-directive-item ng-repeat="item in collection" raw-model="{{::item}}">',
                '</li>'].join('')
    };
});

我没有关于收藏的手表,只有上面的代码。我的意思是angular不会更新集合绑定,除非我更改数组本身,并且我希望它在更改集合中项目的子属性时更新视图。

1 个答案:

答案 0 :(得分:0)

好的,我解决了。我并不为解决方案感到自豪,但它确实有效:

控制器内部:

$scope.updateArray = function() {
        ...
        // Do stuff with tempData
        ...

        // Trick for updating the view - because of the bind-once sub items
        $scope.currentData = [];
        $timeout(function(){
            $scope.currentData = tempData;
        }, 0);
    };