从所有控制器访问的API调用响应 - angular

时间:2015-09-27 21:32:39

标签: angularjs

我有一个控制器,它接受用户输入并将其发布到我的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>

1 个答案:

答案 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');
}