Angularjs指令解析控制器集合

时间:2012-11-18 13:13:47

标签: angularjs

使用angularjs中的pager指令。当我对代码集合($ scope.installations)进行硬编码时,一切正常,但是当我从服务器中提取数据时,'''''属性在指令中始终是'未定义'。

这是我的指示:

angular.module("qusion.ui.pager", [])
    .directive("qnPager", [
        function() {
            return {
                restrict: 'A',
                link: function(scope, element, attrs) {
                    var options = scope.$eval(attrs.qnPager);
                    var settings = {
                        source: null,
                        paging: null,
                        schema: {
                            page: 'PageNumber',
                            size: 'Size',
                            totalPages: 'TotalPages',
                            totalCount: 'TotalCount'
                        }
                    };

                    angular.extend(settings, options);


                    scope.$watch(settings.source, function(value) {
                        console.log(settings.source); // UNDEFINED ???
                    });

                }
            };
        }
    ]);

以下是我如何称呼它。

<ul qn:pager="{source: installations}">

最后我的控制器样本

function MyController(Installation){
   $scope.installations = [];
   // get sample (this works)
   // $scope.installations = [{ID: 1, Title: 'Test 1'}, {ID: 2, Title: 'Test 2'}]
   // get from server (this don't work)
   Installation.getAll().then(function(data) {
       $scope.installations = data.Installations;
   });

}

1 个答案:

答案 0 :(得分:0)

看看这是否解决了您的问题:

不是将新数据数组分配给安装 - 而是代替$scope.installations = data.Installations; - 尝试填充相同的数组。将新数据数组分配给安装时,可能会丢失对旧数组的绑定 - 即,该指令仍可能绑定到以前的数据数组。

$scope.installations.length = 0
for(var i = 0; i < data.Installations.length; i++){
    $scope.installations.push(data.Installations[i]);
}

有关详细信息,请参阅https://stackoverflow.com/a/12287364/215945

可以/应该使用

更新: angular.copy()

angular.copy(data.Installations, $scope.installations);

当向copy()方法提供目标时,它将首先删除目标的元素,然后从源中复制新的元素。