在AngularJS中如何实现一个Model的缓存呢?
可以通过在Provider中返回一个构造函数,并在构造函数中设计一个缓存字段,在本篇末尾将引出这种做法。
一般来说,Model要赋值给Scope的某个变量。
有的直接把对象赋值给Scope变量;有的在Provider中返回一个对象再赋值给Scope变量;有的在Provider中返回一个构造函数再赋值给Scope变量。本篇来一一体验。
首先自定义一个directive,用来点击按钮改变一个scope变量值。
angular .module('app',[]) .directive('updater', function(){ reutrn { scope: { user: '=' }, template: '<button>Change User.data to whaaaat"htmlcode">.controller('FirstCtrl', function(){ var first = this; first.user = {data: 'cool'}; }) .controller('SecondCtrl', function(){ var second = this; second.user = {data: 'cool'}; })页面中:
<div ng-controller="FirstCtrl"> {{user.data}} <input ng-model="user.data"> <div updater user="user"></div> </div> <div ng-controller="SecondCtrl"> {{user.data}} <input ng-model="user.data"> <div updater user="user"></div> </div>以上,
- ● 改变FirstCtrl中input的值,仅仅影响FirstCtrl中的变量user,不影响SecondCtrl中的变量user
- ● 点击FirstCtrl中的按钮,仅仅影响FirstCtrl中的变量user
- ● 改变SecondCtrl中的input的值,仅仅影响SecondCtrl中的变量user,不影响FirstCtrl中的变量user
- ● 点击SecondCtrl中的按钮,仅仅影响SecondCtrl中的变量user
■ 在Provider返回一个对象,赋值给Scope变量
.controller('ThirdCtrl',['User', function(User){ var third = this; third.user = User; }]) .controller('FourthCtrl', ['User',function(User){ var fourth = this; fourth.user = User; }]) //provider返回对象 .provider('User', function(){ this.$get = function(){ return { data: 'cool' } }; })
页面中:
<div ng-controller="ThirdCtrl"> {{user.data}} <input ng-model="user.data"> <div updater user="user"></div> </div> <div ng-controller="FourthCtrl"> {{user.data}} <input ng-model="user.data"> <div updater user="user"></div> </div>
以上,
- ● 改变ThirdCtrl中input的值,同时影响ThirdCtrl和FourthCtrl中的变量user
- ● 点击ThirdCtrl中的按钮,同时影响ThirdCtrl和FourthCtrl中的变量user
- ● 改变FourthCtrl中input的值,同时影响ThirdCtrl和FourthCtrl中的变量user
- ● 点击FourthCtrl中的按钮,同时影响ThirdCtrl和FourthCtrl中的变量user
■ 在Provider中返回一个构造函数,赋值给Scope变量
.controller('FifthCtrl',['UserModel', function(UserModel){ var fifth = this; fifth.user = new UserModel(); }]) .controller('SixthCtrl',['UserModel', function(UserModel){ var sixth = this; sixth.user = new UserModel(); }]) //provider返回构造函数,每一次构造,就生成一个实例 .provider('UserModel', function(){ this.$get = function(){ return function(){ this.data = 'cool'; } } })
页面中:
<div ng-controller="FifthCtrl"> {{user.data}} <input ng-model="user.data"> <div updater user="user"></div> </div> <div ng-controller="SixthCtrl"> {{user.data}} <input ng-model="user.data"> <div updater user="user"></div> </div>
以上,
- ● 改变FifthCtrl中input的值,仅仅影响FifthCtrl中的变量user,不影响SixthCtrl中的变量user
- ● 点击FifthCtrl中的按钮,仅仅影响FifthCtrl中的变量user
- ● 改变SixthCtrl中的input的值,仅仅影响SixthCtrl中的变量user,不影响FifthCtrl中的变量user
- ● 点击SixthCtrl中的按钮,仅仅影响SixthCtrl中的变量user
■ 在Provider中返回一个构造函数,带缓存字段,赋值给Scope变量
.controller('SeventhCtrl',['SmartUserModel', function(SmartUserModel){ var seventh = this; seventh.user = new SmartUserModel(1); }]) .controller('EighthCtrl',['SmartUserModel', function(SmartUserModel){ var eighth = this; eighth.user = new SmartUserModel(1); }]) //provider返回构造函数,根据id获取,如果第一次就创建一个放缓存字段中,以后从缓存中获取 .provider('SmartUserModel', function(){ this.$get = ['$timeout', function($timeout){ var User = function User(id){ //先从缓存字段提取 if(User.cached[id]){ return User.cached[id]; } this.data = 'cool'; User.cached[id] = this; }; User.cached = {}; return User; }]; })
页面中:
<div ng-controller="SeventhCtrl"> {{user.data}} <input ng-model="user.data"> <div updater user="user"></div> </div> <div ng-controller="EighthCtrl"> {{user.data}} <input ng-model="user.data"> <div updater user="user"></div> </div>
以上,
- ● 改变SeventhCtrl中input的值,同时影响SeventhCtrl和EighthCtrl中的变量user
- ● 点击SeventhCtrl中的按钮,同时影响SeventhCtrl和EighthCtrl中的变量user
- ● 改变EighthCtrl中input的值,同时影响SeventhCtrl和EighthCtrl中的变量user
- ● 点击EighthCtrl中的按钮,同时影响SeventhCtrl和EighthCtrl中的变量user
以上就是本文的全部内容,希望对大家的学习有所帮助。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“AngularJS实现Model缓存的方式”评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新动态
2024年05月09日
2024年05月09日
- 群星《发烧秘籍音响攻略DSD》[WAV+CUE]
- F4F《动物森友会》西施惠雕像 预售早鸟价89.99美元
- 任天堂新作通过ESRB评级 2D挑战和平台游戏合集
- 根本卖不出去!网友发现带预购奖励的《Forspoken》
- 群星《妖神令 影视原声专辑》[FLAC/分轨][170.42MB]
- 群星《越洋电话, Vol. 1》[320K/MP3][41.2MB]
- 群星《越洋电话, Vol. 1》[FLAC/分轨][114.98MB]
- 林志颖.1992-为什么受伤的总是我【飞碟】【WAV+CUE】
- 羽泉.2005-三十【华谊兄弟】【WAV+CUE】
- 白嘉莉.2021-精选集【海山】【WAV+CUE】
- 欢乐钓鱼大师玛瑙金鳞怎么钓 欢乐钓鱼大师玛瑙金鳞钓鱼攻略
- 欢乐钓鱼大师樱飘雪怎么钓 欢乐钓鱼大师樱飘雪钓鱼攻略
- 欢乐钓鱼大师银翼的奇术师怎么钓 欢乐钓鱼大师银翼的奇术师钓鱼攻略
- 陈琳.1994-你的柔情我永远不懂[WAV]
- 邓瑞霞2006-广东风云2IN1[南方]2CD[WAV+CUE]