AngularJS,工厂,提供商或服务

时间:2015-05-12 07:24:48

标签: angularjs variables service provider

我试图在包含用户名的应用程序中保存变量,我有一个登录页面(指令),我在其中获取用户名。我试过了:

提供商:它保存我的变量,但我只能在应用加载之前更改,我需要在控制器内部更改变量。

.provider('username',function(){

    var username = 'Default';

    return {
        setName: function(value) { 
            username = value; 
        },
        $get: function() { 
            return { 
                 name: username 
            } 
        }
    }

服务它运作正常,但如果我刷新页面,我会丢失变量。

.service('username', function () {

    var username;
    this.setName = function (value) {
        username = value;
    }
    this.name = function () {
        return username;
    }
})

有人可以告诉我最佳方法是什么?我挣扎了好几个小时想出点什么......

2 个答案:

答案 0 :(得分:1)

您应该创建一个使用浏览器的本地存储/会话存储来存储会话数据的工厂服务

尝试回顾这些问题

Maintaining Session through Angular.js

AngularJS: Service vs provider vs factory

答案 1 :(得分:0)

我通常使用工厂,看起来很完美,但就像你说刷新页面时丢失了所有数据一样。

此行为与Angular of Factory对象无关,而与 Javascript和浏览器无关。您需要将此值保存在存储对象中(cookies,sessionStorage,localStorage,如果您从未使用过此链接,请输入以下链接:Difference between Session Storage, Local Storage and Cookies in AngularJS)。

在您的情况下,在this.setName中,您将其存储在let {'1}}中,在初始化工厂时,您只需检查此值是否存在。

sessionStorage

(这段代码可能不完美,比如值不存在可能会有一个专门的场景,但在你的情况下让你对如何使用它很好) < / p>