我创建了一个过滤器,用于检查用户ID,然后过滤掉没有该用户ID的ng-repeat中的所有结果。
如果我放置过滤器,
UserService.getCurrentUser()
.then(function(user_id){
$scope.user_id = user_id;
});
在我的控制器中它工作正常,但我想让控制器保持尽可能干净,所以我想把它移出去。
我创建了一个名为“userFilter.js”的文件,这是代码,
angular.module('addMovieseat', [])
.filter('user_filter', function() {
UserService.getCurrentUser()
.then(function(user_id){
$scope.user_id = user_id;
});
});
但是当我将过滤器注入我的控制器时,我得到一个错误,
Error: [$injector:unpr] Unknown provider: user_filterProvider <- user_filter <- addMovieCtrl
这也是我获得当前用户ID的服务,
(function(){
"use strict";
angular.module('addMovieseat')
.factory('UserService', function($http, $q){
return{
getCurrentUser: function(){
var user_id = null,
deferred = $q.defer();
// Get the current user id and use it to filter out all movies that do not correspond to that id in the main overview.
$http.get(('/users.json'),{ cache: true}).
success(function (data, status, headers, config) {
if (status == 200) {
deferred.resolve(data.id);
} else {
deferred.resolve(false);
console.error('Error happened while getting the user list.')
}
});
return deferred.promise;
}
}
});
})();
答案 0 :(得分:2)
听起来好像在重复的项目上使用<li ng-repeat="movie in movies" ng-if="movie.user_id == user_id"></li>
可能会更好。喜欢这个
$scope.user_id
假设您的控制器中的$scope.user_id = 'Tim';
$scope.movies = [
{name: 'Movie Title 1', user_id: 'Tim'},
{name: 'Movie Title 2', user_id: 'Jane'},
{name: 'Movie Title 3', user_id: 'Bob'}
];
是要检查的ID,并且您的电影列表是一个数组。像这样:
{{1}}
这只会使用user_id&#39; Tim&#39;。
呈现电影编辑2 :根据OP的评论,更新代码以反映具体问题。
答案 1 :(得分:1)
我实际上认为你在寻找的是
<li ng-repeat="movie in movies|filter:{user_id:user:id}:strict"></li>
如此处所示 https://docs.angularjs.org/api/ng/filter/filter
使用ng-if可能会在某些情况下导致奇怪的行为,请务必阅读https://docs.angularjs.org/api/ng/directive/ngIf