我一直在尝试将用户数据从rails控制器获取到角度控制器:
在我的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
?
答案 0 :(得分: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.json
是url
,如果不是替换它。
<强>更新强>