上周开始使用 Angular,阅读/观看了许多教程,我目前正在尝试构建一个新闻源类型的应用程序。
这是瘦身:我有一个从服务器获取数据的服务。在新闻提要本身上,我有两个控制器:一个在其范围内包含整个新闻提要,另一个在每个新闻提要文章中都有一个实例。如果用户单击单个帖子上的图标,它应该调用已注入两个控制器的服务,然后广播主控制器接收的消息。然后主控制器更新过滤器中的变量,根据用户的选择过滤新闻源内容。
这就是问题所在:除了主控制器没有更新 HTML 中的绑定变量外,一切正常。我已经阅读了每篇关于 ng-repeat 中双向绑定和相关斗争的 SO 文章,但在我的情况下,绑定变量不在 ng-repeat 范围内,因此我要发布。
编码:
services.factory('filterService', function() {
var filterService = {};
filterService.filterKey = '';
filterService.getFilter = function() {
return filterService.filterKey;
};
filterService.setFilter = function(name) {
filterService.filterKey = name;
$rootScope.$broadcast('changeFilter');
};
return filterService;
});
app.controller('CommentCtrl', function($scope, $timeout, $http, filterService) {
$scope.setSearchParam = function(param) {
alert('clicked: ' + param)
filterService.setFilter(param);
}
app.controller('FeedCtrl', function($scope, articles, filterService, $timeout) {
$scope.articles = articles;
$scope.model = {
value: ''
};
$scope.$on('changeFilter', function() {
console.log(filterService.filterKey);
$scope.model.value = filterService.filterKey
}
});
});
<div class="articles">
<div class="articleStub" ng-repeat="article in articles|filter:model.value">
<div ng-controller="CommentCtrl">
<div class="{{article.sort}}">
<div class="leftBlock">
<a href="#" ng-click="setSearchParam(article.sort)">
<div class="typeIcon">
<i ng-class="{'icon-comments':article.question, 'icon-star':article.create, 'icon-ok-sign':article.notype}"></i>
</div>
</a>
注意:FeedCtrl 控制器在 app.config $routeprovider 函数中被调用,无论它叫什么
编辑添加:警报和控制台检查都有效,所以我假设问题不在 filterService 或 CommentCtrl 中。
这是 Plnkr:http ://plnkr.co/edit/bTit7m9b04ADwkzWHv88?p=preview