Bagaimana untuk melaksanakan cache Model dalam AngularJS?
Anda boleh mengembalikan pembina dalam Pembekal dan mereka bentuk medan cache dalam pembina Pendekatan ini akan diperkenalkan pada penghujung artikel ini.
Secara umumnya, Model harus diberikan kepada pembolehubah dalam Skop.
Sesetengah memberikan objek secara langsung kepada pembolehubah Skop; sesetengahnya mengembalikan objek dalam Penyedia dan kemudian menetapkannya kepada pembolehubah Skop; beberapa mengembalikan pembina dalam Penyedia dan kemudian menetapkannya kepada pembolehubah Skop. Mari kita alami mereka satu persatu dalam artikel ini.
Mula-mula suaikan arahan untuk menukar nilai pembolehubah skop dengan mengklik butang.
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(); }) } }
■ Berikan objek kepada pembolehubah Skop
.controller('FirstCtrl', function(){ var first = this; first.user = {data: 'cool'}; }) .controller('SecondCtrl', function(){ var second = this; second.user = {data: 'cool'}; })
Dalam halaman:
<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>
Di atas,
■ Kembalikan objek dalam Pembekal dan tetapkan kepada pembolehubah Skop
.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' } }; })
Dalam halaman:
<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>
Di atas,
■ Kembalikan pembina dalam Pembekal dan berikannya kepada pembolehubah Skop
.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'; } } })
Dalam halaman:
<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>
Di atas,
■ Kembalikan pembina dalam Provider dengan medan cache dan tetapkan ia kepada pembolehubah Skop
.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; }]; })
Dalam halaman:
<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>
Di atas,
Di atas adalah keseluruhan kandungan artikel ini, saya harap ia akan membantu kajian semua orang.