Angular 1.6 ng-repeat 不显示搜索结果
Angular 1.6 ng-repeat not displaying results of a search
我很困惑为什么 ng-repeat 不显示搜索结果。什么有效:
发出HTTP GET请求从数据库中获取所有数据,ng-repeat显示结果。
使用searchterm
发起HTTP GET请求从数据库中获取部分数据,ng-repeat显示结果,$scope.searchterm = "acme";
设置searchterm
在控制器中。
我在模板中的搜索框将 searchterm
发送到控制器,我可以在 console.log 中看到它,然后 HTTP GET 请求发出并且正确数据 returns,我也可以在 console.log.
中看到
使用 ng-repeat 在模板中显示搜索结果数据不起作用。
这是我的 HTML 模板:
<div ng-controller="HomeController">
<form>
<label>Search: <input type="text" ng-model="searchterm" /></label><br />
<input type="submit" ng-click="search(searchterm)" value="Search" />
</form>
</div>
<div ng-repeat="network_operator in network_operators">
<span>{{network_operator.name}}</span><br />
</div>
这是我的控制器:
app.controller('HomeController', ['$scope', '$http', function($scope, $http){
console.log("Home controller.");
// This code displays all of the data, using ng-repeat in the template
// $http.get('http://qualifynow.herokuapp.com/products?searchstring=').then(function(response) {
// $scope.network_operators = response.data.products;
// console.log($scope.network_operators);
// }, function(response) {
// console.log("Error, no data returned.");
// });
// This works instead in place of the next line, the search results display with ng-repeat
// $scope.searchterm = "acme";
$scope.search = function(searchterm) { // This is the line that kills the ng-repeat
console.log($scope.searchterm); // This works, the search term is passed to the controller
$http.get('http://qualifynow.herokuapp.com/products?searchstring=supplier:' + $scope.searchterm).then(function(response) {
$scope.network_operators = response.data.products;
console.log($scope.network_operators); // The correct search results are logged
console.log($scope.network_operators[0].name); // The correct name is logged
}, function(response) {
console.log("Error, no data returned.");
});
};
}]);
我尝试了 运行 $scope.apply()
但这导致出现一条错误消息,指出 $digest
已经 运行.
$scope.search
函数是否正在创建新的 $scope
?即,当 ng-repeat
试图在旧的 $scope
中查找数据时,我的数据是否愉快地驻留在新的 $scope
中?
我试过ng-submit
而不是ng-click
,结果是一样的
我尝试制作一个过滤器,效果很好,但是对于大型数据库来说,将所有数据放在 $scope
上然后进行过滤以获得搜索结果是没有意义的。只获取用户想要的数据会更快。
您的控制器受限。将结果块(ng-repeat 块)放入控制器中。
在您的 HTML 中,显示搜索的部分不在您的控制器范围内。
所以你应该这样做:
<div ng-controller="HomeController">
<form>
<label>Search: <input type="text" ng-model="searchterm" /></label><br />
<input type="submit" ng-click="search(searchterm)" value="Search" />
</form>
<div ng-repeat="network_operator in network_operators">
<span>{{network_operator.name}}</span><br />
</div>
</div>
这会在控制器范围内进行搜索。
我很困惑为什么 ng-repeat 不显示搜索结果。什么有效:
发出HTTP GET请求从数据库中获取所有数据,ng-repeat显示结果。
使用
searchterm
发起HTTP GET请求从数据库中获取部分数据,ng-repeat显示结果,$scope.searchterm = "acme";
设置searchterm
在控制器中。我在模板中的搜索框将
searchterm
发送到控制器,我可以在 console.log 中看到它,然后 HTTP GET 请求发出并且正确数据 returns,我也可以在 console.log. 中看到
使用 ng-repeat 在模板中显示搜索结果数据不起作用。
这是我的 HTML 模板:
<div ng-controller="HomeController">
<form>
<label>Search: <input type="text" ng-model="searchterm" /></label><br />
<input type="submit" ng-click="search(searchterm)" value="Search" />
</form>
</div>
<div ng-repeat="network_operator in network_operators">
<span>{{network_operator.name}}</span><br />
</div>
这是我的控制器:
app.controller('HomeController', ['$scope', '$http', function($scope, $http){
console.log("Home controller.");
// This code displays all of the data, using ng-repeat in the template
// $http.get('http://qualifynow.herokuapp.com/products?searchstring=').then(function(response) {
// $scope.network_operators = response.data.products;
// console.log($scope.network_operators);
// }, function(response) {
// console.log("Error, no data returned.");
// });
// This works instead in place of the next line, the search results display with ng-repeat
// $scope.searchterm = "acme";
$scope.search = function(searchterm) { // This is the line that kills the ng-repeat
console.log($scope.searchterm); // This works, the search term is passed to the controller
$http.get('http://qualifynow.herokuapp.com/products?searchstring=supplier:' + $scope.searchterm).then(function(response) {
$scope.network_operators = response.data.products;
console.log($scope.network_operators); // The correct search results are logged
console.log($scope.network_operators[0].name); // The correct name is logged
}, function(response) {
console.log("Error, no data returned.");
});
};
}]);
我尝试了 运行 $scope.apply()
但这导致出现一条错误消息,指出 $digest
已经 运行.
$scope.search
函数是否正在创建新的 $scope
?即,当 ng-repeat
试图在旧的 $scope
中查找数据时,我的数据是否愉快地驻留在新的 $scope
中?
我试过ng-submit
而不是ng-click
,结果是一样的
我尝试制作一个过滤器,效果很好,但是对于大型数据库来说,将所有数据放在 $scope
上然后进行过滤以获得搜索结果是没有意义的。只获取用户想要的数据会更快。
您的控制器受限。将结果块(ng-repeat 块)放入控制器中。
在您的 HTML 中,显示搜索的部分不在您的控制器范围内。
所以你应该这样做:
<div ng-controller="HomeController">
<form>
<label>Search: <input type="text" ng-model="searchterm" /></label><br />
<input type="submit" ng-click="search(searchterm)" value="Search" />
</form>
<div ng-repeat="network_operator in network_operators">
<span>{{network_operator.name}}</span><br />
</div>
</div>
这会在控制器范围内进行搜索。