在angularjs中存储值

时间:2015-10-19 13:43:14

标签: angularjs

所以问题是,我想知道是否可以将应用程序的值存储在某个内容中,因此只需要在加载主应用程序时加载1次。因为现在我有一个控制器,每当我需要用户的某些属性时,控制器就会向数据库发送一个查询。这不是很好吗?

控制器:

(function () {
    'use strict';

    angular
        .module('app')
        .controller('UserPropertiesController', UserPropertiesController);

    UserPropertiesController.$inject = ['$scope', '$http'];
    function UserPropertiesController($scope, $http ) {

        $http.get('/user').success(function(data) {

            $http.post('/setuser/',data.name).success(function() {

                $http.get('/getuser/').success(function(data) {

                    $scope.userdata = data;


                })
            })
        })

    }

})();

这样的一些html页面:

<!-- Testing stuff -->
<div ng-controller="UserPropertiesController" class="container">

    <p>The ID is {{userdata.id}}</p>
    <p>The email is {{userdata.email}}</p>

</div>

2 个答案:

答案 0 :(得分:1)

您有几种不同的存储数据客户端选项。无论您选择哪种方式,您都应该将所有ajax调用放入服务中,这将使维护变得更加容易。

1:使用$ http缓存。这是内置于$http服务中的简单内存存储。实施后,您将继续像往常一样进行$http次呼叫,但如果可用,将回复商店中的数据。缺点是它在内存中,因此占用资源,如果用户点击“X”,将会丢失 https://docs.angularjs.org/api/ng/service/ $ HTTP#缓存

2:LocalStorage / SessionStorage 大多数现代浏览器现在都支持LocalStorage和SessionStorage。它的速度相当快,并且具有非常简单的API。它也是同步的,因此实现起来非常简单。缺点是它没有足够的容量,您将数据存储在键值对中,其中数据必须是字符串。因此,您必须先将数据转换为JSON。当用户的会话结束时,会擦除SessionStorage,但是LocalStorage将持续存在,直到用户清除它或您执行代码。 https://developer.mozilla.org/en/docs/Web/API/Window/sessionStorage

3:IndexedDB 大多数现代浏览器都支持这一点,但不如LocalStorage。这是大量客户端数据存储的选择(在我看来)。它本质上是一个完整的客户端数据库。您有集合,事务查询,索引。它是完全异步的。这种能力的缺点是复杂性,它需要分配更多的样板代码来连接和处理数据库版本升级。我过去曾使用过基于浏览器的视频游戏。 https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API

4:自己动手 最后,可以选择混合使用这些方法中的任何一种。感谢angular强大的拦截器系统,您可以实现自己的$ http缓存,使用localSotrage或indexedDB,或者在内存中为您提供对缓存的更多控制,然后是默认值。 https://docs.angularjs.org/api/ng/service/ $ HTTP#拦截器

或者您可以将数据存储在您的服务中。

.service('user', function ($http, $q) {
    var user;

    this.getUser = function () {
        if (!user) {
            return $http.get('/user')
                .then(function (data) {
                    user = data;

                    return data;
                });
        } else {
            return $q.when(user);
        }
    }
});

希望有所帮助,也很容易这是我的第一种写作答案。

答案 1 :(得分:0)

请查看angular localforage. 您可以使用它来存储本地存储中的键/值对。