0

我一直在尝试将用户数据从 rails 控制器获取到 angular 控制器:

在我的application.html.erb中,我User这样定义:

angular.element(document).ready(function() {
    angular.module('myModule').value('User', <%= @user.to_json.html_safe %>);
});

在我的角度控制器中:

myModule.controller('MyController', ['$scope', 'User', function($scope, User) {
    $scope.user = User;
}]);

这样做的问题是它将用户数据暴露给视图。有一个更好的方法吗?

我也尝试过这种方法:

在我的模块中,我创建了一个带有 $resource 对象的工厂:

myModule.factory('User', function($resource) {
    return $resource('/users/:action', {},
    {
        'getUser': { method: 'GET', params: { action: 'fetch_user.json' }, isArray:true }
    });    
});

在我的控制器中:

myModule.controller('MyController', ['$scope', 'User', function($scope, User) {
    $scope.user = User.getUser();

    // Also tried the following.
    // This will throw undefined errors in places that are trying to access $scope.user
    User.getUser({}, function(data) {
        $scope.user = data;
    });
}]);

但是,这要么不会按时加载用户数据,要么会undefined在我的整个应用程序中引发错误,要么会将结果的每个字符放入它自己的数组容器中。

理想情况下,该@user变量作为 json 从服务器返回users_controller.rb,我想检索它并将其存储在$scope.user. 这样做的问题是它需要username作为参数传递以检索正确的用户数据。

如何在$scope.user不暴露数据的情况下正确、干净地设置?

4

1 回答 1

0

指示

myModule.factory('User', function($http) {
    return {
        getUser: function () {
            // deferred object
            var deferred = $q.defer();
            $http.get('/fetch_user.json') {
                .success(function (data, status) {
                     deferred.resolve(data);
                })
                .error(function (data, status) {
                     deferred.reject("An error occured while trying to get users");
                });
            }
            return deferred.promise;
       }
    }
}

控制器:

myModule.controller('MyController', ['$scope', 'User', function($scope, User) {
     User.getUser().then(function (data) {
         $scope.user = data;
     });
}]);

我假设/fetch_user.jsonurl,如果不只是替换它。

更新

于 2013-07-25T19:19:41.690 回答