因此,我在自定义指令中拥有自己模板中用于搜索栏的代码。然后,将该指令放入我的Navbar模板中。
<form class="navbar-form navbar-left" role="search">
<div class="form-group">
<input type="text" class="form-control" placeholder="Search" ng-model="searchText">
</div>
<button type="submit" class="btn btn-default" ng-click="go('/searchResults')">Submit</button>
</form>
。
.state('searchResults', {
url: '/searchResults',
templateUrl: 'templates/searchResults.html',
controller: 'searchController'
})
}]).
directive('searchBar', function() {
return {
restrict: 'E',
templateUrl: 'templates/search.html',
controller: "searchController"
}
});
我的SearchController处理此搜索栏的范围,但是在将数据绑定到另一个模板(即我的searchResults模板)时遇到了一些麻烦。我的SearchController调用我编写的服务,该服务可以检索一些数据并可以正常工作。但是,当我尝试将数据绑定到我的SearchResults页面时,angular不会绑定从服务接收到的任何数据(尽管它将控制台注销正确的数据)。
Name: {{player.playerName}}<br>
Link: {{player.link}}<br>
Things: {{things}}<br>
控制器:
angular
.module('app')
.controller('searchController', ['$scope',"$http","$location", "PlayerDAO", function($scope, $http, $location, PlayerDAO){
$scope.things="stuff";
$scope.go = function ( path ) {
if(checkSearchBar()){
$location.path( path );
PlayerDAO.getPlayers($scope.searchText).then($scope.postPlayerToResultsPage, onError);
}
};
$scope.postPlayerToResultsPage=function(result){
$scope.player=result;
$scope.things="Hooray, it worked";
$scope.player.playerName;
console.log(result);
};
}]);
然而,对我来说奇怪的是,它将绑定我用来获取数据的函数中没有的任何数据(即它将绑定{{things}}),但是我的函数“ postPlayerToResultsPage”中的任何数据都不会被Angular看到。如果我将搜索栏的代码直接放在搜索结果页面中,则该页面上显示的导航栏可以正常工作,但是我需要将搜索栏放在主导航模板上,并且可以在所有页面。
我怀疑由于指令的$ scope的原型性质,您的数据没有约束力。尝试使用controllerAs语法进行数据绑定,以避免$ scope模糊。例如
指示:
controller: 'searchController',
controllerAs: 'searchCtl'
控制器:
var controller = this;
$scope.postPlayerToResultsPage=function(result){
controller.player=result;
controller.things="Hooray, it worked";
controller.player.playerName;
console.log(result);
};
的HTML:
Name: {{searchCtl.player.playerName}}<br>
Link: {{searchCtl.player.link}}<br>
Things: {{searchCtl.things}}<br>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句