请考虑以下事项:
AngularJS:
angular.module('app', [])
.value('userData', {})
.factory('AuthService', function (userData) {
$http.put('/login', {
...
})
.then(function onSuccess(res) {
userData = res.data.user
})
})
.controller('Dashboard', function (userData) {
$scope.user = userData
})
HTML:
<div ng-controller="Dashboard"> {{ user.name }} </div>
userData
时是否应填充{{ user.name }}
? userData
是否应该继续刷新?如果目标是显示从特定于用户的API接收的信息,除了将res.data.user
存储到本地存储之外,我还有哪些其他选项?
答案 0 :(得分:2)
直接分配,例如
userData = res.data.user;
打破JS引用,意味着引用该变量的任何内容都不会获得新值。
我认为更好的选择是在工厂中保存对承诺的引用
.factory('AuthService', function ($http) {
return $http.put('/login', {
...
}).then(function (res) {
return res.data.user;
});
})
HTTP请求仅在创建工厂时运行一次,但承诺将根据工厂名称保存。然后你的控制器(或其他任何东西)可以简单地使用
$scope.user = 'Loading...'; // if you want to show something right away
AuthService.then(function(userData) {
$scope.user = userData;
});