2014-06-30 99 views
0

太多的迭代創建過濾器的ID來獲得一個建築物的名稱:過濾器

app.filter('getBuilding', function(APIService) { 

    return function(input) { 

     var buildings = APIService.query({ route:'building', id: input }, function(building) { 

      return building.name; 

     }); 

    }; 

}); 

的例子給我一個迭代的錯誤。這是一個ng-repeat更新問題嗎?我怎樣才能防止這一點?

<li ng-repeat="room in rooms" class="list-group-item"> 
    <strong>{{room.name}}</strong><span class="small">({{room.building | getBuilding}})</span> 
</li> 

謝謝!

+0

如果您沒有向我們展示綁定「房間」陣列的控制器,我們無法爲您提供幫助。另外,如果你能提供一個可以工作的Plunker,那會很棒。 – domokun

回答

1

應使用過濾器來格式化顯示器的數據。您應該從過濾器函數返回一個基元(一個字符串或數字)以顯示該值。

有幾個問題與您的代碼:

  1. 你的過濾功能不返回任何東西。由於過濾器沒有返回任何值,因此angularJS會不斷重複等待一個值。達到迭代限制後,將引發錯誤。

  2. 您的服務使用回調。理論上工作的唯一方法是從APIService返回承諾對象。但據我所知,過濾器不能以異步方式工作,也不能解決承諾。您必須立即返回一個值以使過濾器正常工作。

  3. 過濾器函數可能會被調用多次,直到模型在範圍變化中穩定爲止。這意味着在過濾器中使用遠程調用可能會導致嚴重的性能問題。

正確的方法將被加載的建築在控制器或指令的名稱,然後通過該值過濾,如果名稱需要以任何方式進行格式化。

+0

好吧,我明白了!謝謝! – nofear87