Rumah  >  Artikel  >  hujung hadapan web  >  Cara yang betul untuk pembolehubah global Angularjs dipantau oleh scope_AngularJS

Cara yang betul untuk pembolehubah global Angularjs dipantau oleh scope_AngularJS

WBOY
WBOYasal
2016-05-16 15:16:051289semak imbas

Jika anda hanya ingin tahu kesimpulannya:

$scope.$watch($rootScope.xxx,function(newVal,oldVal){
//do something
})

Seseorang segera bertanya mengapa tidak:

$rootScope.$watch("xxx",function(newVal,oldVal){
//do something
})

Izinkan saya memberitahu anda mengapa saya perlu menggunakan kaedah pertama daripada pepijat baru-baru ini yang saya temui.

Logiknya seperti yang ditunjukkan dalam rajah Pada mulanya, saya menggunakan kaedah penulisan $rootScope.$watch. Kerana jam tangan angularjs di $rootScope sah secara global setelah didaftarkan. Dan pembolehubah global saya adalah maklumat pesanan, yang bermaksud bahawa pengawal berbeza mempunyai perubahan padanya, dan setiap perubahan akan mencetuskan $rootScope.$watch untuk memasuki pengawal lain. Secara analogi, $broadcast di $rootScope akan bermula secara global.

Sebenarnya, ini bukan satu-satunya cara untuk mencari kod sumber kaedah jam tangan dengan menyemak kod sumber sudut, yang termasuk kod berikut:

return function deregisterWatch() {
if (arrayRemove(array, watcher) >= 0) {
incrementWatchersCount(scope, -1);
}
lastDirtyWatch = null;
};

Kod ini memberitahu kami bahawa pembersihan jam tangan secara manual boleh dilaksanakan. Contohnya:

var watcher = $rootScope.$watch("xxx",function(){});
//手动清除 watcher 
watcher();

Ia masih sangat mudah, bukan?

Apabila saya meneliti perkara ini, saya rasa ada sesuatu yang tidak kena. Adakah $skop saya akan dibersihkan? Jadi, teruskan melihat melalui kod sumber, saya menemui kod berikut dalam kaedah $destroy:

// Disable listeners, watchers and apply/digest methods
this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = noop;
this.$on = this.$watch = this.$watchGroup = function() { 
return noop; 
};
this.$$listeners = {};

Kod di atas adalah postur yang betul untuk pembolehubah global Angularjs untuk dipantau oleh skop yang diperkenalkan dalam artikel ini Saya harap ia akan membantu anda Jika artikel ini tidak ditulis dengan baik, sila berikan saya nasihat.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn