我有一个控制器,它接受用户输入并将其发布到我的API并捕获恰好是用户数据的响应。这很好但是我需要访问具有不同控制器的仪表板上的用户数据。我无法弄清楚如何将API调用抽象为服务并从仪表板控制器获取响应。有没有更简单的方法?登录功能工作正常,但res.data.user
似乎无法访问。我的问题是如何从不同的控制器访问响应?
控制器(注册):
angular.module('app').controller('Signup', function ($scope, $http, toastr, $location, $auth) {
// Submit request to Sails.
$http.post('/api/user/email', {
email: $scope.signupForm.email.toLowerCase(),
password: $scope.signupForm.password
})
.then(function onSuccess(res){
$auth.setToken(res.data.token)
$location.path('/dashboard')
$scope.user = res.data.user;
})
})
HTML(仪表板):
<div class="container" ng-show="isAuthenticated()" ng-controller="Dashboard">
<p>License: {{user.license}}</p>
</div>
答案 0 :(得分:1)
拥有存储用户数据的工厂或服务。将其注入原始
.factory('storeData', function () {
var userData = {}; //it's empty, thats ok
function dataAll () {
return userData;
};
return dataAll;
}
.controller('Signup', function ($scope, $http, toastr, $location, $auth, ***storeData***) {
//remove *** obviously
var importedData = storeData();
//或storeData.dataAll()由于某种原因,OP说这不起作用,但它适用于我的代码
$http.post('/api/user/email', {
email: $scope.signupForm.email.toLowerCase(),
password: $scope.signupForm.password
})
.then(function onSuccess(res){
$auth.setToken(res.data.token)
$location.path('/dashboard')
将修改返回的包含res.data.user的工厂对象 而不是空白。 javascript不会复制,而是链接 回到原始工厂对象。所以发生了变化 工厂对象。
importedData = res.data.user
$scope.user = res.data.user;
})
})
新控制器示例
.controller('test', function ($scope, storeData) {
console.log(storeData() + 'see if data shows up');
}