2012-11-18 188 views
0

處理angularjs中的pager指令。當我硬編碼示例收集($ scope.installations)一切正常,但是當我從服務器的'選項'屬性拉指令的數據總是'未定義'。Angularjs指令解析控制器集合

這裏是我的指令:

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; 
    }); 

} 
+0

你能分享你'安裝'的服務代碼嗎? – wajatimur

+0

還有更多的依賴關係,所以它會有很多代碼粘貼在這裏。這只是http請求返回的承諾。這部分工作正常,因爲模板中的表格填充了安裝數據。 –

+0

您使用異步或同步請求填寫的數據? – wajatimur

回答

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); 

當目的地被提供到複製()方法時,它將首先刪除目的地的元素,然後在新的從複製資源。