angularjs service全局保存数据的误区
来源:互联网 发布:公务员论坛qzzn 软件 编辑:程序博客网 时间:2024/06/03 12:50
《angular权威指南》中有这么一句话“服务提供了一种能在应用的整个生命周期内保持数据的方法,它能够在控制器之间进行通信,并且能保证数据的一致性。”
这里的【应用的整个生命周期】中的【应用】到底是什么?估计原文是【app】,然后就被翻译成了【应用】。【应用】是有歧义的,他可以有两个含义:1、指整个web应用,这样的话,他就类似于session了。第二个含义:【应用】指某个module,在这个module下面的为同一个实例。
那么,到底是不是第一个含义呢?我们来试一下。
上一篇文章中我将service理解为了可以提供类似session的东西,我们看一下代码:
(function(angular){angular.module('app.login').factory('userService',function($http){return {http:$http,token:'',auth:[],loginname:'',login:function(loginname,password,fn){this.http({url:'../../scripts/loginModule/services/loginOKTest.js',method:'GET'})//data,header,config,status.success(Base.bindArguments(this,function(){var data=arguments[0][0];if(data[0].success){this.token=data[0].token;this.auth=data[0].auth;Cookies.setCookieValue("loginname",this.loginname,60*60*1000);Cookies.setCookieValue("token",this.token,60*60*1000);fn(data[0]);}})).error(function(data,header,config,status){alert("验证服务请求失败!"); });},getToken:function(){return this.token;},getLoginname:function(){return this.loginname;},getAuth:function(){return this.auth;},loginout:function(){this.token='';this.loginname='';this.auth=[];Cookies.delCookieValue("token");Cookies.delCookieValue("loginname");}};});})(window.angular);我们在这里设置了token和auth成员变量
这里的Base.bindArguments保证了回调中的this为该服务
Base.bindArguments=function(context,fn){return function(){return fn.call(context,arguments);};};
然后,我们在另一个module中看看能不能取到token和auth
(function(angular){ if(!app) app={}; if(!app.main)app.main=angular.module('app.main', []); app.main.controller('MenuController',function($scope,menuService,userService){ var loginname=Cookies.getCookieValue("loginname"); var token=Cookies.getCookieValue("token");Cookies.delCookieValue("token");Cookies.delCookieValue("loginname"); $scope.menu=[]; menuService.initMenu(loginname,token,function(menu){ $scope.menu=menu; $scope.$broadcast("menuLoaded"); }); $scope.displaySwitch=function(index){ if($scope.menu[index].isShow) $scope.menu[index].isShow=false; else $scope.menu[index].isShow=true; }; }); })(window.angular);
结果是这里的loginname和token是空的。说明这里依赖注入的userService和之前的userService已经不是同一个对象了。也就是这两个userService变量中的指针指向不同的堆内存
0 0
- angularjs service全局保存数据的误区
- Android 保存全局数据
- angularjs 保存数据 和 check
- angularJS的service理解
- 大数据的误区
- AngularJS的service与provider
- angularJS的Service(服务)基础
- AngularJS中使用service,并同步数据
- 关于设置前台Service进程的误区
- 数据挖掘的五个误区
- 数据挖掘的认识误区
- 走出数据挖掘的误区
- 数据挖掘的五个误区
- Ajax遍历数据的误区
- Ajax遍历数据的误区
- Android编程心得-使用Application类保存应用的全局数据
- wxwidgets中对全局数据以xml文件的形式进行保存
- Android编程心得-使用Application类保存应用的全局数据
- 2016找工作一路走来
- vagrant报错
- Hibernate主键生成策略
- 表格嵌套出现边框重叠变粗问题
- ubuntu 安装配置ROS Indigo
- angularjs service全局保存数据的误区
- win系统下nodejs安装及环境配置
- 第8周项目3 顺序串算法(4)
- 深度学习中的数学与技巧(7):特征值和特征向量的几何意义、计算及其性质
- 3516A/D千兆网络变百兆方法
- 1007. remove for single link list with head node
- 第八周项目5—删除字符
- 第八周项目3-顺序串算法
- (第八周项目1)建立顺序串算法库