3

我想返回包含對象數組的作用域變量的值長度。那麼,我的想法是減少html視圖並將變量存儲在我的控制器中。問題是,當我稱之爲我得到的總長度爲0在AngularJS中返回作用域變量的長度

下面的代碼被認爲是一個視圖控制檯值:

<div class="panel panel-default"> 
     <div class="panel-body bg-form"> 
      <div class="col-sm-4"> 
       <strong>total:</strong> 
      </div> 
      <div class="col-sm-3"> 
       <span class="badge"> {{ nameslist.length }}</span> 
      </div> 
     </div> 
    </div> 

    <div class="panel panel-default"> 
     <div class="panel-body bg-form"> 
      <div class="col-sm-4"> 
       <strong>filtered:</strong> 
      </div> 
      <div class="col-sm-3"> 
       <span class="badge"> {{ filteredNames.length }}</span> 
      </div> 
     </div> 
    </div> 
... 
<tr ng-repeat="names in filteredNames = (nameslist | orderBy:sortType:sortReverse)" class="show-cursor"> 
     <td>{{ names.fname }}</td> 
     <td>{{ names.lname }}</td> 
</tr> 

這些應該是新的代碼:

<div class="panel panel-default" ng-repeat="sResult in searchResult"> 
     <div class="panel-body bg-form"> 
      <div class="col-sm-4"> 
       <strong>{{ sResult.title }}:</strong> 
      </div> 
      <div class="col-sm-3"> 
       <span class="badge"> {{ sResult.content }}</span> 
      </div> 
     </div> 
    </div> 

Ctrl鍵:

$scope.nameslist = CrudService.getAllNames(); 
$scope.searchResult = [ 
      { 
       title: 'total', 
       content: $scope.nameslist.length 
      }, 
      { 
       title: 'filtered', 
       content: $scope.filteredNames.length 
      } 
     ]; 

服務:

myApp.factory('CrudService', ['ResService', 
    function (ResService) { 
     return { 
      getAllNames: function() { 
       return ResService.names.query(); 
      }, 
... 
}]); 

myApp.factory('ResService', ['$resource', 'baseUrl', 
    function ($resource, baseUrl) { 
     return { 
      names: $resource(baseUrl + '/api/names/:Id/:fname', { 
       Id: '@Id', 
       fname: '@fname' 
      }, { 
       'update': { 
        method: 'PUT' 
       } 
      }), 
... 
}]); 

如何僅返回數組的數量和過濾的數組的數量?

+0

也許你只是想在控制檯上評估$ scope.searchResult.length時,你是不是在模塊方面? $ scope不是全局變量 – Black0ut

+2

您的控制器似乎將您的CrudService當作同步對待。 –

+0

@ BlackOut爲什麼我應該返回searchResult的長度..我需要名稱列表和filteredNames的長度。 – yuro

回答

0

該行不會立即填充該對象;

$scope.nameslist = CrudService.getAllNames(); 

angular documentation on $resource

意識到調用$資源對象方法 立即返回一個空引用(取決於 IsArray的物體或陣列)是很重要的。一旦數據從服務器返回,現有的 引用就會填充實際數據。

您需要在視圖中綁定到對象$scope.namelist,或者等到承諾解析完成,然後在成功回調中分配屬性。

一個解決方案如下;

的Javascript

$scope.searchResult = [{ 
    title: 'total', 
    content: $scope.nameslist // holds a reference to the item returned by CrudService 
}] 

查看

<div class="col-sm-4"> 
    <strong>{{ searchResult.title }}:</strong> 
</div> 
<div class="col-sm-3"> 
    <span class="badge"> {{ searchResult.content.length }}</span> 
</div> 
+0

我得到的對象的數組並返回它的視圖,但這不是我的意圖。我想要這個數組的LENGTH。我重寫了如下視圖:' {{sResult.content.length}}'並且控制器中的代碼就像您的示例代碼。但是,我怎樣才能返回變量'filteredNames'的長度在我上面的帖子中查看ngRepeat。 – yuro

+0

我已經更新了我的答案,以獲得正確的變量名稱。至於'filteredNames',你的代碼不會顯示你從哪裏得到。如果你從'getAllNames'(即:'$ resource')類似的地方得到它,那麼同樣適用,你需要將模型中的引用返回到視圖,並將* view *綁定到完整路徑的長度:'searchResult.content.length' –

相關問題