javascript - AngularJS 搜索对象数组

标签 javascript arrays angularjs filter

我的 Controller 中有一个对象数组,例如:

$scope.fields = [
    {fieldName:'houseNum',fieldLabel:'House Number',disabled:false},
    {fieldName:'street',fieldLabel:'Street',disabled:false},
    {fieldName:'city',fieldLabel:'City',disabled:true},
    {fieldName:'state',fieldLabel:'State',disabled:true},
]

在 HTML 中,我希望能够获得一个 fieldLabel,其中 fieldName=='street'。 AJS 文档假定每个过滤器案例都应该在 ng-repeat 的上下文中——但在我的情况下不是这样,因为我只是试图从基于“fieldName”的“fields”数组中提取一个“fieldLabel”

例如:HTML

{{ fieldLabel in fields | filter : {fieldName:'street'} : true}}

我怎样才能做这样的事情 - 或者我是否需要创建自己的指令并将 $scope.fields 传递给指令并手动循环?

最佳答案

你可以这样做:

{{ (fields | filter : {fieldName:"street"} : true)[0].fieldLabel}}

(fields | filter : {fieldName:"street"} : true) 返回过滤项目数组获取第一个 [0] 并访问 该对象的 fieldLabel 属性。

angular.module('app', []).controller('ctrl', function($scope) {
  $scope.fields = [{
    fieldName: 'houseNum',
    fieldLabel: 'House Number',
    disabled: false
  }, {
    fieldName: 'street',
    fieldLabel: 'Street',
    disabled: false
  }, {
    fieldName: 'city',
    fieldLabel: 'City',
    disabled: true
  }, {
    fieldName: 'state',
    fieldLabel: 'State',
    disabled: true
  }, ]
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="ctrl">
  {{ (fields | filter : {fieldName:"street"} : true)[0].fieldLabel}}
</div>

虽然更好的选择是从 Controller 本身设置属性,这样过滤器就不会在每个摘要周期中运行。

function getFieldByName(prop){
     var field = {};
     //Or just use a for loop and break once you find a match
     $scope.fields.some(function(itm){
         if(itm.fieldName === prop){
            field = itm;
            return true;
         }
     });
     //Or you could inject $filter as well an do as below
     //return $filter('filter')($scope.fields,{fieldName:"street"})[0] || {}
     return field;
}

//Somewhere
$scope.streetField = getFieldByName('street');

在 View 中:

{{streetField.fieldLabel}}

Array.some

关于javascript - AngularJS 搜索对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30627718/

相关文章:

javascript - 如何创建 Karma/Jasmine 单元测试来检查依赖于其他模块的 Angular 服务

javascript - 仅当 View 以 Angular 加载时,无法让加载器加载。它在循环

javascript - 覆盖现有的 JavaScript Array.prototype 方法会导致无限递归?

Javascript 获取地址栏值

javascript - 在 JavaScript 中简单替换为用户输入

javascript - 各种迭代器性能差异的原因

javascript - 删除多个数据库,仅注册一个云函数

arrays - MATLAB/ Octave : Increment array with an array of indexes

javascript - 尝试在 jquery 中推送数组时出现奇怪的输出

javascript - ng-init 预选的选项在 ngOptions 中不起作用 | AngularJS