国产探花免费观看_亚洲丰满少妇自慰呻吟_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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平潭县| 大同市| 静宁县| 碌曲县| 罗源县| 科技| 剑川县| 兰考县| 长子县| 革吉县| 民权县| 深圳市| 洛南县| 尼勒克县| 隆德县| 株洲县| 安化县| 宣恩县| 宝清县| 乌鲁木齐县| 龙胜| 溧阳市| 清水县| 巴中市| 平度市| 东至县| 定安县| 富川| 平谷区| 龙南县| 成武县| 鹤壁市| 辰溪县| 分宜县| 缙云县| 抚顺县| 上饶县| 青神县| 昭通市| 静海县| 塘沽区|