我需要使用当前用户的id作为ng-repeat的过滤器。我仍然想要很好地掌握Angular,所以我的假设可能是错的。但我在考虑是否可以将当前用户信息(名称,ID,电子邮件等)放在范围内,然后我可以使用该范围将ID插入Angular控制器中的过滤器。
所以我创建了users_controller.rb
def index
respond_with current_user
end
因此它只向当前用户显示他的信息。
我已将资源添加到routes.rb
resources :users
然后我创建了一个工厂来检索userService.js
.factory('userService', [
'$http', function($http) {
return {
loadUsers: function() {
return $http.get(('/users.json'),{ cache: true}).
success(function (data, status, headers, config) {
if (status == 200) {
console.log('Succes')
} else {
console.error('Error happened while getting the user list.')
}
})
}
};
}
])
然后控制台登录浏览器说succes
,所以我假设它正在从users.json文件中检索数据。
然后在我的mainController.js
我创建了一个函数,用于保存范围内工厂服务的响应数据
userService.loadUsers().then(function(response) {
$scope.users = response.data;
});
console.log ($scope.users)
但是这个console.log
会得到undefined
的结果。所以我的第一个问题是,有没有人知道我为什么得到undefined
而不是当前用户的信息。
我的第二个问题是,如果我们解决了第一个问题并且我可以将信息存储在$scope.users
中,是否可以在控制器中使用这些信息?
var user_id = $scope.user.id
$scope.user_id = user_id;
答案 0 :(得分:0)
你的第一个问题:
AngularJS是异步的,因此$http
服务是异步的,因此您未定义(因为console.log
服务在$http
服务完成之前运行了
你的第二个问题:
如果您使用$scope.user_id
(我假设将当前用户ID存储在其他地方并未在其他地方定义)作为过滤器(这很好,尽管您可能需要定义自己的它在问题中模糊不清),您需要在$http
服务内(而不是在外部)分配它。或者您可以链接一些承诺,仅在$http
请求完成后分配它。虽然在我看来,如果您只是使用当前用户ID来过滤掉一组用户,那么您不应该使用ng-repeat
,然后告诉AngularJS使用一些自定义过滤器。 AngularJS将为ng-repeat
中的每个元素创建一组观察者,并且还将执行许多其他操作以跟踪DOM中的事件或脚本更改视图。 (我猜它赢了
如果我对此感到满意,您应该使用angular.forEach
或for
循环手动过滤掉并将其发送到您的视图