试图确定用户信息的范围

时间:2015-10-10 14:19:22

标签: angularjs

我需要使用当前用户的id作为ng-repeat的过滤器。我仍然想要很好地掌握Angular,所以我的假设可能是错的。但我在考虑是否可以将当前用户信息(名称,ID,电子邮件等)放在范围内,然后我可以使用该范围将ID插入Angular控制器中的过滤器。

所以我创建了users_controller.rb

def index
  respond_with current_user
end

因此它只向当前用户显示他的信息。

我已将资源添加到routes.rb

resources :users 

然后我创建了一个工厂来检索userService.js

中的JSON信息
.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;

1 个答案:

答案 0 :(得分:0)

你的第一个问题:

AngularJS是异步的,因此$http服务是异步的,因此您未定义(因为console.log服务在$http服务完成之前运行了

你的第二个问题:

如果您使用$scope.user_id(我假设将当前用户ID存储在其他地方并未在其他地方定义)作为过滤器(这很好,尽管您可能需要定义自己的它在问题中模糊不清),您需要在$http服务内(而不是在外部)分配它。或者您可以链接一些承诺,仅在$http请求完成后分配它。虽然在我看来,如果您只是使用当前用户ID来过滤掉一组用户,那么您不应该使用ng-repeat,然后告诉AngularJS使用一些自定义过滤器。 AngularJS将为ng-repeat中的每个元素创建一组观察者,并且还将执行许多其他操作以跟踪DOM中的事件或脚本更改视图。 (我猜它赢了

如果我对此感到满意,您应该使用angular.forEachfor循环手动过滤掉并将其发送到您的视图