0

在 angularjs 中处理寻呼机指令。当我对示例集合 ($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;
   });

}
4

1 回答 1

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() 方法提供目标时,它将首先删除目标的元素,然后从源中复制新的元素。

于 2013-01-17T04:20:23.240 回答