AngularJS实现Model缓存的方式

前端之家收集整理的这篇文章主要介绍了AngularJS实现Model缓存的方式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

可以通过在Provider中返回一个构造函数,并在构造函数中设计一个缓存字段,在本篇末尾将引出这种做法。

一般来说,Model要赋值给Scope的某个变量。

有的直接把对象赋值给Scope变量;有的在Provider中返回一个对象再赋值给Scope变量;有的在Provider中返回一个构造函数再赋值给Scope变量。本篇来一一体验。

首先自定义一个directive,用来点击按钮改变一个scope变量值。

Change User.data to whaaaat?',link: function(scope,element,attrs){ element.on('click',function(){ scope.user.data = 'whaaaat?'; scope.$apply(); }) } }

■ 给Scope变量赋值一个对象

页面中:

<div ng-controller="SecondCtrl">
{{user.data}}
<input ng-model="user.data">
<div updater user="user">

以上,

  • ● 改变FirstCtrl中input的值,仅仅影响FirstCtrl中的变量user,不影响SecondCtrl中的变量user
  • ● 点击FirstCtrl中的按钮,仅仅影响FirstCtrl中的变量user
  • ● 改变SecondCtrl中的input的值,仅仅影响SecondCtrl中的变量user,不影响FirstCtrl中的变量user
  • ● 点击SecondCtrl中的按钮,仅仅影响SecondCtrl中的变量user

■ 在Provider返回一个对象,赋值给Scope变量

页面中:

<div ng-controller="FourthCtrl">
{{user.data}}
<input ng-model="user.data">
<div updater user="user">

以上,

■ 在Provider中返回一个构造函数,赋值给Scope变量

函数,每一次构造,就生成一个实例 .provider('UserModel',function(){ this.$get = function(){ return function(){ this.data = 'cool'; } } })

页面中:

<div ng-controller="SixthCtrl">
{{user.data}}
<input ng-model="user.data">
<div updater user="user">

以上,

■ 在Provider中返回一个构造函数,带缓存字段,赋值给Scope变量

函数,根据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="EighthCtrl">
{{user.data}}
<input ng-model="user.data">
<div updater user="user">

以上,

以上就是本文的全部内容,希望对大家的学习有所帮助。

原文链接:/js/50219.html
Model缓存

猜你在找的JavaScript相关文章