2017-05-25 31 views
1

我是angular js的新手。我无法弄清楚过滤器如何处理对象中的名称而不是电话键上的名称。因为如果我们在ng-model中只使用关键字,它将在范围中定义的对象中同时过滤姓名和电话号码在关键字.name的情况下,它只会过滤掉名称。我无法弄清楚当我们在ng模型中使用“keyword.name”时,以及我们使用“filter:keyword”过滤器时过滤器如何工作。

<script> 

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

     $scope.answer = 1+2; 
     $scope.object=[ 

     {name:'John', phone:'555-1276'}, 
     {name:'Mary', phone:'800-BIG-MARY'}, 
     {name:'Mike', phone:'555-4321'}, 
     {name:'Adam', phone:'555-5678'}, 
     {name:'Julie', phone:'555-8765'}, 
     {name:'Juliette', phone:'555-5678'}] 

    }]); 

</script> 

<div ng-app = "app" ng-controller="controller" > 

    <input type="text" ng-model="keyword.name" /> 

    <table> 
     <thead> 
      <th>Name</th> 
      <th>Phone</th> 
     </thead> 
     <tr ng-repeat = "item in object | filter: keyword" > 

      <td> {{item.name}} </td> 
      <td> {{item.phone}} </td> 

     </tr> 

    </table> 



    </div>  



</body> 

回答

0

如果仅基于关键字这是您的NG-模型,然后通过默认的角度补充说,对任何属性相匹配一个特殊的属性名称进行筛选。默认情况下它是$。因此,技术上基于关键字as ng-model的过滤与基于关键字$的过滤相同。但是,如果将属性追加到关键字,它将根据您的新关键值覆盖角度的默认特殊属性名称和过滤器。

https://docs.angularjs.org/api/ng/filter/filter

+0

这意味着当ng-model =“keyword”时,那么对于角度来说,它将是“filter:keywrod。$”或“ng-model = keyword。$”?其实我对每个新的角度js –

+0

我认为对角度,它将是“过滤器:关键字。$”。 – Vivz

+0

但它背后的逻辑是什么?你能解释一下吗? –

0

这里要传递对象(关键字)作为表达在过滤器以从所述阵列中选择。您只声明了对象keyword.name的一个属性。你必须看到filter:keyword as filter:{name:“this value will be item.name”}。所以这只返回一个名字的数组项。

例如,如果你有ng-model =“keyword.dance”。然后必须看到过滤器:关键字作为过滤器:{dance:“这个值将item.dance”}。在这里他们将不会匹配,所以你会得到空白的结果。

+0

实际过滤:关键字给出了有效的结果。我明白过滤器:{对象}也可以给出相同的结果。例如,检查https://docs.angularjs.org/api/ng/filter/filter –

相关问题