Angularjs ng重复过滤器无法正确处理输入和ng模型



我正在使用AngularJS,并显示一个带有ng repeat的列表。我试图实现的是过滤列表,只显示包含用户在输入中写入的值的项目。

我像这里的例子一样设置了它,但没有成功。

HTML:

<div ng-if="result.length > 0">
<input type="text" class="pl-4" ng-model="searchText" placeholder="Search" />
<div class="mt-4 text-left animationIf" ng-repeat="item in result | filter: searchText">
<div>
<span class="text-danger">Name: </span>
<span class="m-0" ng-bind="item.name"></span>
</div>
<div>
<span class="text-danger">Country: </span>
<span class="m-0" ng-bind="item.country"></span>
</div>
<div>
<span class="text-danger">Born: </span>
<span class="m-0" ng-bind="item.born"></span>
</div>
<div>
<span class="text-danger">Surnname: </span>
<span class="m-0" ng-bind="item.surname"></span>
</div>
</div>
</div>

结果对象的示例如下:

$scope.result = [{
name: "John",
country: "California ",
born: "283 AC",
surname: "Snow"
},{
name: "Michael",
country: "US",
born: "1958",
surname: "Jackson"
}];

如果我在ng-init="$scope.result = 'John'"给出,过滤器会工作,并且只显示包含"John"的项目,但如果我稍后将输入的值更改为"Michael",它将不会起任何作用。不适用任何筛选器。

我在这里做错了什么?

var app = angular.module('testApp',[]);
app.controller('testCtrl',function($scope){
$scope.result = [{
name: "John",
country: "California ",
born: "283 AC",
surname: "Snow"
},{
name: "Michael",
country: "US",
born: "1958",
surname: "Jackson"
}];
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<input type="text" class="pl-4" ng-model="searchText" placeholder="Search" />
<body ng-app="testApp" ng-controller="testCtrl">
<div class="mt-4 text-left animationIf" ng-repeat="item in result | filter: searchText">
<div>
<span class="text-danger">Name: </span>
<span class="m-0" ng-bind="item.name"></span>
</div>
<div>
<span class="text-danger">Country: </span>
<span class="m-0" ng-bind="item.country"></span>
</div>
<div>
<span class="text-danger">Born: </span>
<span class="m-0" ng-bind="item.born"></span>
</div>
<div>
<span class="text-danger">Surnname: </span>
<span class="m-0" ng-bind="item.surname"></span>
</div>
</div>

您的代码按原样运行。。问题发生在NgInit中,您将作用域对象结果设置为"John",这不是一个数组,使用NgRepeat无法开箱即用。

所以,只要不设置$scope.result = 'John',一切都可以正常

angular.module("app",[])
.controller("myCtrl", function($scope){
$scope.result = [{
name: "John",
country: "California ",
born: "283 AC",
surname: "Snow"
},{
name: "Michael",
country: "US",
born: "1958",
surname: "Jackson"
}];
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.12/angular.min.js"></script>
<div ng-app="app" ng-controller="myCtrl">
<input type="text" class="pl-4" ng-model="searchText" placeholder="Search" />
<div class="mt-4 text-left animationIf" ng-repeat="item in result | filter: searchText">
<div>
<span class="text-danger">Name: </span>
<span class="m-0" ng-bind="item.name"></span>
</div>
<div>
<span class="text-danger">Country: </span>
<span class="m-0" ng-bind="item.country"></span>
</div>
<div>
<span class="text-danger">Born: </span>
<span class="m-0" ng-bind="item.born"></span>
</div>
<div>
<span class="text-danger">Surnname: </span>
<span class="m-0" ng-bind="item.surname"></span>
</div>
</div>
</div>

我认为您的代码没有任何问题。但不要像你指导的那样使用ng-init命令:

ng init="$scope.result='John'">

此命令将清除您在控制器中创建的阵列。

我有一个外部div,它有ng-if="result.length > 0",所以它只在我填充结果时显示。这使得输入根本不起作用。

去掉ng-if,改为放ng-show,解决了我的问题。

最新更新