我的路线 /search 显示了一个模板和相关的控制器,它们显示了我的数据库中的条目列表(使用从控制器正确绑定数据到使用 $scope 变量的模板)。所以如果我去 /search 它只是工作并显示数据。
现在我在页面顶部添加了一个搜索框。当用户开始输入时,无论他在网站上的哪个位置,我都想立即显示结果(显示带有结果的模板)。
Angular 的方法是什么?
这是我最终做到的方式:
我的路线:
App.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/', { templateUrl: '<%= asset_path "welcome/index.html" %>' });
$routeProvider.when('/search', { templateUrl: '<%= asset_path "search/index.html" %>', controller: 'SearchController' });
$routeProvider.otherwise({ redirectTo: '/' });
}]);
全局布局:
<form class="navbar-form navbar-left" role="search" data-ng-controller="SearchController">
<div class="form-group">
<input type="text" class="form-control" placeholder="search" data-ng-model="query" />
</div>
<button type="submit" class="btn btn-default">Search</button>
</form>
<div data-ng-view></div>
控制器:
angular.module('tastyPie.controllers')
.controller('SearchController', function($scope, Search) {
// Bind to the view
$scope.searchResults = [];
$scope.query = '';
// if the user is not on the search page and start typing, move him to the search page and perform a search
$scope.$watch('query', function(new_data, old_data) {
if (new_data == old_data) return;
if ($location.path().indexOf('/search') < 0)
$location.path('search');
$scope.search();
});
$scope.search = function() {
var s = new Search();
s.query = $('#query').val();
s.execute();
};
// callback from the search services which returns the results
$scope.$on('searchResults', function(object, results){
$scope.searchResults = results;
});
});
和模板 search/index.html :
<ul class="list-group" ng-init="search()">
<li class="list-group-item" ng-repeat="result in searchResults">
<strong>{{result.title_texts}}</strong>
<br />
{{result}}
</li>
</ul>