AngularJS實(shí)現(xiàn)Model緩存的方式
在AngularJS中如何實(shí)現(xiàn)一個(gè)Model的緩存呢?
可以通過(guò)在Provider中返回一個(gè)構(gòu)造函數(shù),并在構(gòu)造函數(shù)中設(shè)計(jì)一個(gè)緩存字段,在本篇末尾將引出這種做法。
一般來(lái)說(shuō),Model要賦值給Scope的某個(gè)變量。
有的直接把對(duì)象賦值給Scope變量;有的在Provider中返回一個(gè)對(duì)象再賦值給Scope變量;有的在Provider中返回一個(gè)構(gòu)造函數(shù)再賦值給Scope變量。本篇來(lái)一一體驗(yàn)。
首先自定義一個(gè)directive,用來(lái)點(diǎn)擊按鈕改變一個(gè)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變量賦值一個(gè)對(duì)象
.controller('FirstCtrl', function(){
var first = this;
first.user = {data: 'cool'};
})
.controller('SecondCtrl', function(){
var second = this;
second.user = {data: 'cool'};
})
頁(yè)面中:
<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
- ● 點(diǎn)擊FirstCtrl中的按鈕,僅僅影響FirstCtrl中的變量user
- ● 改變SecondCtrl中的input的值,僅僅影響SecondCtrl中的變量user,不影響FirstCtrl中的變量user
- ● 點(diǎn)擊SecondCtrl中的按鈕,僅僅影響SecondCtrl中的變量user
■ 在Provider返回一個(gè)對(duì)象,賦值給Scope變量
.controller('ThirdCtrl',['User', function(User){
var third = this;
third.user = User;
}])
.controller('FourthCtrl', ['User',function(User){
var fourth = this;
fourth.user = User;
}])
//provider返回對(duì)象
.provider('User', function(){
this.$get = function(){
return {
data: 'cool'
}
};
})
頁(yè)面中:
<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的值,同時(shí)影響ThirdCtrl和FourthCtrl中的變量user
- ● 點(diǎn)擊ThirdCtrl中的按鈕,同時(shí)影響ThirdCtrl和FourthCtrl中的變量user
- ● 改變FourthCtrl中input的值,同時(shí)影響ThirdCtrl和FourthCtrl中的變量user
- ● 點(diǎn)擊FourthCtrl中的按鈕,同時(shí)影響ThirdCtrl和FourthCtrl中的變量user
■ 在Provider中返回一個(gè)構(gòu)造函數(shù),賦值給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返回構(gòu)造函數(shù),每一次構(gòu)造,就生成一個(gè)實(shí)例
.provider('UserModel', function(){
this.$get = function(){
return function(){
this.data = 'cool';
}
}
})
頁(yè)面中:
<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
- ● 點(diǎn)擊FifthCtrl中的按鈕,僅僅影響FifthCtrl中的變量user
- ● 改變SixthCtrl中的input的值,僅僅影響SixthCtrl中的變量user,不影響FifthCtrl中的變量user
- ● 點(diǎn)擊SixthCtrl中的按鈕,僅僅影響SixthCtrl中的變量user
■ 在Provider中返回一個(gè)構(gòu)造函數(shù),帶緩存字段,賦值給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返回構(gòu)造函數(shù),根據(jù)id獲取,如果第一次就創(chuàng)建一個(gè)放緩存字段中,以后從緩存中獲取
.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;
}];
})
頁(yè)面中:
<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的值,同時(shí)影響SeventhCtrl和EighthCtrl中的變量user
- ● 點(diǎn)擊SeventhCtrl中的按鈕,同時(shí)影響SeventhCtrl和EighthCtrl中的變量user
- ● 改變EighthCtrl中input的值,同時(shí)影響SeventhCtrl和EighthCtrl中的變量user
- ● 點(diǎn)擊EighthCtrl中的按鈕,同時(shí)影響SeventhCtrl和EighthCtrl中的變量user
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
相關(guān)文章
AngularJS創(chuàng)建一個(gè)上傳照片的指令實(shí)例代碼
這篇文章主要介紹了AngularJS創(chuàng)建一個(gè)上傳照片的指令實(shí)例代碼,需要的朋友可以參考下2018-02-02
Angular應(yīng)用程序的Hydration基本概念詳解
這篇文章主要為大家介紹了Angular應(yīng)用程序的Hydration基本概念詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
angular $watch 一個(gè)變量的變化(實(shí)例講解)
下面小編就為大家?guī)?lái)一篇angular $watch 一個(gè)變量的變化(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08
詳解Angular5/Angular6項(xiàng)目如何添加熱更新(HMR)功能
這篇文章主要介紹了詳解Angular5/Angular6項(xiàng)目如何添加熱更新(HMR)功能,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
解決Angular2 router.navigate刷新頁(yè)面的問(wèn)題
今天小編就為大家分享一篇解決Angular2 router.navigate刷新頁(yè)面的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
Angularjs實(shí)現(xiàn)mvvm式的選項(xiàng)卡示例代碼
每位Web開(kāi)發(fā)者應(yīng)該都知道,選項(xiàng)卡是現(xiàn)代web網(wǎng)頁(yè)中最常用的效果之一,所以本文重點(diǎn)是用angularjs這個(gè)非?;餸vvm框架,實(shí)現(xiàn)選項(xiàng)卡效果。有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。2016-09-09
AngularJS實(shí)現(xiàn)Model緩存的方式
這篇文章主要介紹了AngularJS實(shí)現(xiàn)Model緩存的方式,分享了多種AngularJS實(shí)現(xiàn)Model緩存的方法,感興趣的小伙伴們可以參考一下2016-02-02
基于Angularjs實(shí)現(xiàn)分頁(yè)功能
這篇文章主要介紹了基于Angularjs實(shí)現(xiàn)分頁(yè)功能的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-05-05
angularjs2 ng2 密碼隱藏顯示的實(shí)例代碼
本篇文章主要介紹了angularjs2 ng2 密碼隱藏顯示的實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08

