【问题标题】:AngularJS filter is not working in objectAngularJS过滤器在对象中不起作用
【发布时间】:2015-05-08 14:06:14
【问题描述】:

我的 AngularJS 过滤器不适用于对象。

查看:

<input type="text" ng-model="searchKeyUser.$" placeholder="Pesquisar Chaves" class="form-control"><br>
<ul class="list-group">
    <li class="list-group-item clicavel chaves" ng-repeat="chave in keyUsers | filter:searchKeyUser" ng-class="{ active:Grupo.isActiveKey(chave.Chave.id)}" ng-click="Grupo.mostrar()">
          {{chave.Chave.chave}}{{chave.show}}
    </li>
</ul>

我尝试使用 searchKeyUser.$、searchKeyUser.Chave.$、searchKeyUser.Chave.chave,但什么也没发生。详细信息:{{chave.Chave.chave}}{{chave.show}} 文本正在运行。

编辑: js代码:

(function() {
  var app = angular.module('groupUsers', []);
  app.controller('GroupsController', function($scope, $http){

    //Busca rel Chaves Usuarios
    $http.get(myBaseUrl + '/QlikRelKeyUser/retornoGroups').success(function(data, status, headers, config) {
      $scope.keyUsers = data;
      console.log($scope.keyUsers);
      for(x in $scope.keyUsers){
        aux = 0;
        qtd = $scope.keyUsers[x].QlikUser.length;
        for(y in $scope.keyUsers[x].QlikUser){
          aux++;
          if(qtd == 1){
            $scope.keyUsers[x].show = ' (' + $scope.keyUsers[x].QlikUser[y].nome + ')';
          }else if(aux == qtd){
            $scope.keyUsers[x].show += ', ' + $scope.keyUsers[x].QlikUser[y].nome + ')';
          }else{
            if(aux==1){
              $scope.keyUsers[x].show = ' (' + $scope.keyUsers[x].QlikUser[y].nome;
            }else{
              $scope.keyUsers[x].show += ', ' +       $scope.keyUsers[x].QlikUser[y].nome;
            }
          }
        }
      }
      console.log('');
    }).error(function(data, status, headers, config) {
      console.log('NÃO FUNFOU');
      console.log(config);
    });
    $scope.searchKeyUser = {$:''};
   });

编辑 2: 相同的观点:

<input type="text" ng-model="searchGroup.$" placeholder="Pesquisar Grupos" class="form-control"><br>
        <ul class="list-group" >
          <li class="list-group-item clicavel" ng-repeat="group in grupos | filter:searchGroup" ng-class="{ active:Grupo.isSet(group.QlikUserGroup.id)}" ng-click="Grupo.setActive(group.QlikUserGroup.id)">
            {{group.QlikUserGroup.nome}}
            <span class='badge bg-important'>1</span>
            <span class='badge' stylee='padding-right:30px;'>{{Grupo.totalKeys(group.QlikUserGroup.id)}}</span>
          </li>
        </ul>

同样的JS:

$http.get(myBaseUrl + '/QlikUserGroup/retornoGroups').success(function(data, status, headers, config) {
      $scope.grupos = data;
    }).error(function(data, status, headers, config) {
      console.log('NÃO FUNFOU');
      console.log(config);
    });

我的console.log($scope.grupos); 回复:

Array[67]
0: Object
$$hashKey: "object:530"
QlikUserGroup: Object
id: "1"
nome: "Name name name"
__proto__: Object
__proto__: Object
1: Object
2: Object
3: Object
4: Object
...

【问题讨论】:

  • 也提供你的 js 代码。什么 searchKeyUser ?你试试过滤什么?所有领域?或通过一些?还是一个人?
  • 我第一次尝试现在的样子
  • 你确定$scope.keyUsers 是数组吗?好像是object
  • 哦,真的是对象,对不起
  • 我正在使用 CakePHP 框架从数据库中获取对象

标签: javascript arrays angularjs filter cakephp-2.0


【解决方案1】:

Angular filter 仅适用于数组,但您尝试传递 object。所以你至少有两个解决方案

  • 修改服务器端并返回数组
  • 从js中的对象制作数组,像这样

    $scope.keyUsers = [];
    console.log(data);
    for(x in data){
        var el = data[x];
        $scope.keyUsers.push(el);
        el.show = '('+ el.QlikUser.map(function(el){ return el.nome; }).join(', ') +')';
    }
    console.log($scope.keyUsers);
    

var data = {
  '1': {
    'QlikUser': [{
      nome: 'a'
    }, {
      nome: 'b'
    }, {
      nome: 'c'
    }, {
      nome: 'd'
    }, ]
  }
}

var keyUsers = [];
console.log(data);
for (x in data) {
  var el = data[x];
  keyUsers.push(el);
  el.show = '(' + el.QlikUser.map(function(el) {
    return el.nome;
  }).join(', ') + ')';
}
console.log(keyUsers);

【讨论】:

  • 它可以将对象的对象转换为对象数组,但el.show = '('+ data[x].QlikUser.join(', ') +')'; 的逻辑不起作用,因为 QlikUser 是一个数组:/ 我试图找出发生的事情并修改了我的返回码
  • @JulyanoFelipe, join 是来自 Array.prototype 的方法,所以如果 QlikUser 真的是数组,它应该可以工作,但它似乎也与 length i> 属性 :-)
  • 但它正在 $scope.keyUser[x].show 中写入([object Object])
  • 因为QlikUser的结构是QlikUser = array(array(id, name), array(id2, name2))(数组的数组),就像var QlikUser = [array(id, name), array(id2, name2)]
  • @JulyanoFelipe,修复代码示例并添加sn-p,试试吧
猜你喜欢
  • 2020-01-31
  • 2015-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多