2016-04-26 32 views
0

模板角模板沒有更新範圍過濾

<ul> 
    <li ng-repeat="object in objects">{{object.id}}</li> 
</ul> 

控制器

function Controller($scope, ObjectFilter) { 
    $scope.objects = [{id: 1}, {id: 2}, {id: 3}]; 
    var ids = [1, 3]; 
    $scope.objects = ObjectFilter($scope.objects, ids); 
} 

過濾

function ObjectFilter(objects, ids) { 
    var out = []; 
    for(i=0; i<ids.length; i++) { 
     for(j=0; j<objects.length; j++) { 
      if(objects[j].id === ids[i]) { 
       out.push(objects[j]); 
      } 
     } 
    } 
    return out; 
} 

$ scope.objects後被過濾但模板不會更新。
如果我嘗試$scope.$apply()我收到一個錯誤,$ apply已在進行中。

這不僅適用?爲什麼不?!

編輯:所以這個簡化的例子似乎工作,但不是我的實際代碼!

編輯:我通過組合兩個控制器使它工作。感謝您的意見,幫助我找出問題的所在。

+0

對我來說工作得很好!只需將「OjectFilter」更改爲「ObjectFilter」 – Revive

+0

修復了錯字。這是我的代碼的簡化版本。也許這是父母/孩子範圍的問題。 – barro32

回答

2

小提琴:https://jsfiddle.net/9gb3s7yk/

你忘了申報你的循環變量:var ivar j

for(var i = 0; i < idCollection.length; i++) { 
    for(var j = 0; j < objs.length; j++) { 
     if(objs[j].id === idCollection[i]) { 
      out.push(objs[j]); 
    } 
    } 
} 
+0

小提琴仍然工作沒有計數器變量的聲明。 –

+0

不知道爲什麼OP的不工作。 ¯\ _(ツ)_ /¯過濾功能超出範圍,也許? – Kyle

2

嘗試定義您的$範圍唯一這樣的:

function Controller($scope, ObjectFilter) { 
    //Private variable inside controller: 
    var objects = [{id: 1}, {id: 2}, {id: 3}]; 
    var ids = [1, 3]; 

    //Define Viewscope: 
    $scope.objects = ObjectFilter(objects, ids); 
} 
1

完美的作品!只需將「OjectFilter」更改爲「ObjectFilter」