【问题标题】:Returning length of scope variable in AngularJS在AngularJS中返回范围变量的长度
【发布时间】:2015-11-27 05:17:22
【问题描述】:

我想返回包含对象数组的范围变量的值长度。好吧,我的想法是减少 html 视图并将变量存储在我的控制器中。问题是当我在控制台中调用值时,我总是得到长度 0。

以下代码考虑了之前的视图:

<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'
                }
            }),
...
}]);

如何只返回数组的个数和过滤后的数组个数?

【问题讨论】:

  • 当您不在模块上下文中时,也许您只是想在控制台上评估 $scope.searchResult.length? $scope 不是全局变量
  • 您的控制器似乎将您的 CrudService 视为同步的。
  • @Black0ut 为什么我应该返回 searchResult 的长度。我需要名称列表和过滤名称的长度。
  • @DavidL hmm 我不知道 CrudService 应该在哪里进行同步处理。我的意思是我只需要范围变量的长度。
  • 但是你无法知道你还没有收到的变量的长度

标签: javascript html angularjs angularjs-scope angularjs-service


【解决方案1】:

此行不会立即填充对象;

$scope.nameslist = CrudService.getAllNames();

来自angular documentation on $resource

重要的是要意识到调用 $resource 对象方法 立即返回一个空引用(对象或数组取决于 是数组)。一旦数据从服务器返回,现有的 参考是用实际数据填充的。

您需要绑定到您视图中的对象$scope.namelist,或者,等到promise 被解决,然后在成功回调中分配属性。

一种解决方法如下;

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>

【讨论】:

  • 我正在获取对象数组并将其返回到视图中,但这不是我的意图。我想要这个数组的长度。我已将视图重写如下:&lt;span class="badge"&gt; {{ sResult.content.length }}&lt;/span&gt; 并且控制器中的代码就像您的示例代码。但是我怎样才能返回变量filteredNames 的长度在我上面的帖子中查看 ngRepeat。
  • 我已经更新了我的答案以获得正确的变量名。至于filteredNames,你的代码没有显示你从哪里得到它。如果您从与getAllNames 相似的地方获取它(即:$resource),那么同样适用,您需要将模型中的引用保存到视图中,并让 view 绑定到全路径长度:searchResult.content.length
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-20
相关资源
最近更新 更多