如何在AngularJS的列表中找不到输入值时显示元素?
问题描述:
我创建了搜索输入来搜索列表中的一些项目。我想,如果项搜索不在列表内显示添加按钮像html代码:如何在AngularJS的列表中找不到输入值时显示元素?
<div ng-controller="foodCtrl">
<form>
<div class="form-group row foodGroupp" >
<label for="inputFood" class="col-sm-2 col-form-label">food</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="inputFood" ng-model="inputFood" placeholder="Write some food" ng-keyup="doCheck()">
</div>
<span id="addIcon" ng-show="showIcon">
<button class="btn btn-default">+</button>
</span>
<ul ng-show="inputFood" id="foodList">
<li ng-repeat="foodN in foodName | filter : inputFood">
<span>{{ foodN.name}}</span>
</li>
</ul>
</div>
<div class="form-group row">
<div class="offset-sm-2 col-sm-10">
<button type="submit" class="btn btn-primary">הוסף</button>
</div>
</div>
</form>
</div>
的JavaScript代码如下所示:
var app = angular.module('mainApp', []);
app.controller('foodCtrl',function($scope,$http){
$scope.foods = [];
$scope.foodName = [];
$http.get('/files/foodName.json')
.success(function(response){
$scope.foodName = response;
});
$scope.showIcon = false;
$scope.doCheck = function(){
$(function() {
if($scope.inputFood != ""){
var sizeOfList = $("#foodList").find("li").length;
if(sizeOfList == 0){
console.log("sizeOfList " +sizeOfList);
$scope.showIcon = true;
}
}else{
$scope.showIcon = false;
}
});
}
});
它不能正常工作。如果值的长度是1或列表显示,它仍然显示我的图标。
答
您可以根据您的过滤器数据直接显示您的按钮。
HTML代码
<div ng-controller="foodCtrl">
<form>
<div class="form-group row foodGroupp" >
<label for="inputFood" class="col-sm-2 col-form-label">food</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="inputFood" ng-model="inputFood" placeholder="Write some food" ng-keyup="doCheck()">
</div>
<span id="addIcon" ng-hide="(foodName|filter:inputFood).length > 0">
<button class="btn btn-default">+</button>
</span>
<ul ng-show="inputFood" id="foodList">
<li ng-repeat="foodN in foodName | filter : inputFood">
<span>{{ foodN.name}}</span>
</li>
</ul>
</div>
<div class="form-group row">
<div class="offset-sm-2 col-sm-10">
<button type="submit" class="btn btn-primary">הוסף</button>
</div>
</div>
</form>
</div>
答
它工作正常,在此间举行的代码snippet.Nothing改变。
var app = angular.module('mainApp', []);
app.controller('foodCtrl', function($scope, $http) {
$scope.foods = [];
$scope.foodName = [];
//$http.get('/files/foodName.json')
// .success(function(response) {
// $scope.foodName = response;
// });
$scope.foodName = [{
name: 'test1'
}, {
name: 'test2'
}, {
name: 'test3'
}];
$scope.showIcon = false;
$scope.doCheck = function() {
if ($scope.inputFood != "") {
var sizeOfList = $("#foodList").find("li").length;
if (sizeOfList == 0) {
console.log("sizeOfList " + sizeOfList);
$scope.showIcon = true;
}
} else {
$scope.showIcon = false;
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="mainApp">
<div ng-controller="foodCtrl">
<form>
<div class="form-group row foodGroupp">
<label for="inputFood" class="col-sm-2 col-form-label">food</label>
<div class="col-sm-10">
<input type="atext" class="form-control" id="inputFood" ng-model="inputFood" placeholder="Write some food" ng-keyup="doCheck()">
</div>
<span id="addIcon" ng-show="showIcon">
<button class="btn btn-default">+</button>
</span>
<ul ng-show="inputFood" id="foodList">
<li ng-repeat="foodN in foodName | filter : inputFood">
<span>{{ foodN.name}}</span>
</li>
</ul>
</div>
<div class="form-group row">
<div class="offset-sm-2 col-sm-10">
<button type="submit" class="btn btn-primary">הוסף</button>
</div>
</div>
</form>
</div>
</div>
+0
json文件的结果不显示。如果你看到结果,你会注意到,即使你的搜索是在数据中的按钮仍然显示。至少对于一个参数。 – oded
它的作品!非常感谢。 – oded