Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS-特定深度属性上的过滤器_Javascript_Angularjs - Fatal编程技术网

Javascript AngularJS-特定深度属性上的过滤器

Javascript AngularJS-特定深度属性上的过滤器,javascript,angularjs,Javascript,Angularjs,我有一个javascript对象,希望在特定的deep属性上使用angular的过滤器,但它似乎不起作用 function MyCtrl($scope, $filter) { $scope.items = [ {id:{val:1,str:'abc'}, name:'John'}, {id:{val:2,str:'abcd'}, name:'John'}, {id:{val:3,str:'xyz'}, name:'John'}, {id:{val:4,str:'

我有一个javascript对象,希望在特定的deep属性上使用angular的过滤器,但它似乎不起作用

function MyCtrl($scope, $filter)
{
 $scope.items = [
    {id:{val:1,str:'abc'}, name:'John'},
    {id:{val:2,str:'abcd'}, name:'John'},
    {id:{val:3,str:'xyz'}, name:'John'},
    {id:{val:4,str:'axcvb'}, name:'John'},
    {id:{val:5,str:'qwe'}, name:'John'}];

 $scope.items2 = $scope.items;

 $scope.$watch('search', function(param)
 {
    $scope.items = $filter('filter')($scope.items2, {id:{val:param}},false);
 });
};
这是小提琴

如果我只是说

$scope.items = $filter('filter')($scope.items2, {id:param},false);

然后,它工作,但它搜索整个对象,这不是我想要的,我希望它可以用于部分搜索,因此我将精确匹配标志设置为false,从控制器中删除
$watch
,并对ng repeat执行筛选

<tr ng-repeat="item in items | filter:{id.val:search}">
    <td>{{item.id}}</td>
    <td>{{item.name}}</td>
</tr>

{{item.id}
{{item.name}

是否有任何原因不想在
ng repeat
上执行筛选?使用
$watch
搜索模式进行加密似乎是一种过度使用没有特别的原因,我实际上想知道如何在控制器的深层属性上使用过滤器。这只是我在某处找到并修改的示例代码。我只是想知道在对象表示法中给出第二个参数,
{id:{val:param}}
是否正确,或者是否有其他方法使用内置过滤器。我将发布一些可能有帮助的东西,它工作得很好,但对于我的实际项目,我需要在控制器中使用它,我如何实现这一点。仅仅说
{id.val:search}
{id:{val:search}}
是不起作用的。你能用字符串代替search watch函数吗?