国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

AngularJS實現Model緩存的方式

2019-11-20 10:37:34
字體:
來源:轉載
供稿:網友

在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?</button>',   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'}; })

頁面中:

<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

以上就是本文的全部內容,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新宁县| 电白县| 米林县| 宿迁市| 合川市| 元阳县| 大名县| 弥勒县| 年辖:市辖区| 苏尼特左旗| 宣武区| 孝感市| 沾化县| 木兰县| 邯郸县| 田东县| 陆川县| 惠东县| 东乡县| 阿拉善左旗| 新津县| 页游| 杭锦后旗| 武山县| 玉树县| 邻水| 六枝特区| 井冈山市| 福海县| 马边| 岑溪市| 丰都县| 阳泉市| 奈曼旗| 牟定县| 德保县| 平安县| 华亭县| 大悟县| 满城县| 枣庄市|