博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AngularJS中实现Model缓存
阅读量:7182 次
发布时间:2019-06-29

本文共 3960 字,大约阅读时间需要 13 分钟。

 

在AngularJS中如何实现一个Model的缓存呢?

可以通过在Provider中返回一个构造函数,并在构造函数中设计一个缓存字段,在本篇末尾将引出这种做法。
一般来说,Model要赋值给Scope的某个变量。
有的直接把对象赋值给Scope变量;有的在Provider中返回一个对象再赋值给Scope变量;有的在Provider中返回一个构造函数再赋值给Scope变量。本篇来一一体验。
首先自定义一个directive,用来点击按钮改变一个scope变量值。

 

angular    .module('app',[])    .directive('updater', function(){        reutrn {            scope: {                user: '='            },            template: '',            link: function(scope, element, attrs){                element.on('click', function(){                    scope.user.data = 'whaaaat?';                    scope.$apply();                })            }        }

 

■ 给Scope变量赋值一个对象

 

.controller('FirstCtrl', function(){        var first = this;        first.user = {data: 'cool'};    })    .controller('SecondCtrl', function(){        var second = this;        second.user = {data: 'cool'};    })

 

页面中:

{
{user.data}}
{
{user.data}}

以上,

● 改变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'            }        };    })

 

页面中:

{
{user.data}}
{
{user.data}}

以上,

● 改变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';            }        }    })

 

页面中:

{
{user.data}}
{
{user.data}}

以上,

● 改变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;        }];    })

 

页面中:

{
{user.data}}
{
{user.data}}

以上,
● 改变SeventhCtrl中input的值,同时影响SeventhCtrl和EighthCtrl中的变量user
● 点击SeventhCtrl中的按钮,同时影响SeventhCtrl和EighthCtrl中的变量user
● 改变EighthCtrl中input的值,同时影响SeventhCtrl和EighthCtrl中的变量user
● 点击EighthCtrl中的按钮,同时影响SeventhCtrl和EighthCtrl中的变量user

转载地址:http://veukm.baihongyu.com/

你可能感兴趣的文章
Session,Cookie的问题
查看>>
记录前端遇到的坑
查看>>
Matlab查看数值不用科学计数法显示
查看>>
C# 读取资源文件.resx 中的xml资源
查看>>
python版mapreduce题目实现寻找共同好友
查看>>
ASP.NET Ajax组件介绍
查看>>
webpack
查看>>
应用程序动态全屏和退出全屏
查看>>
索引的删除和更新
查看>>
2017广东工业大学程序设计竞赛决赛 Problem E: 倒水(Water) (详解)
查看>>
概率题--笔试
查看>>
深度学习实战-强化学习-九宫格 当前奖励值 = max(及时奖励 + 下一个位置的奖励值 * 奖励衰减)...
查看>>
DS博客作业——树
查看>>
抽象工厂模式
查看>>
ural 1261. Tips(进制运算)
查看>>
tomcat安装与配置
查看>>
(5).plus(3).minus(2);
查看>>
Mevan 初涉
查看>>
猴子分桃
查看>>
Django框架之templates(模板)系统
查看>>