AngularJS:.value persistance

时间:2016-09-07 05:15:12

标签: angularjs

请考虑以下事项:

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存储到本地存储之外,我还有哪些其他选项?

1 个答案:

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