AngularJS'nin bunu anlamak için nasıl çalıştığını bilmeniz gerekir.
Özet döngüsü ve $ kapsam
Her şeyden önce, AngularJS sindirim döngüsü olarak adlandırılan bir kavram tanımlar . Bu döngü, AngularJS'nin tüm s tarafından izlenen tüm değişkenlerde herhangi bir değişiklik olup olmadığını kontrol ettiği bir döngü olarak düşünülebilir $scope
. Eğer varsa Yani $scope.myVar
sizin denetleyici tanımlanan ve bu değişken edildi izlenen için işaretlenmiş , o zaman dolaylı üzerindeki değişiklikleri izlemek için angularjs anlatıyorsun myVar
döngünün her tekrarında.
Doğal bir takip sorusu şu olabilir: Her şey $scope
izlenmeye bağlı mı ? Neyse ki hayır. Bilgisayarınızdaki her nesnede yapılan değişiklikleri izlerseniz $scope
, hızlı bir şekilde özetleme döngüsünün değerlendirilmesi çok uzun sürer ve hızlı bir şekilde performans sorunlarıyla karşılaşırsınız. Bu yüzden AngularJS ekibi bize bazı $scope
değişkenlerin izlendiğini bildirmenin iki yolunu verdi (aşağıda okuyun).
$ watch, $ kapsam değişikliklerini dinlemeye yardımcı olur
Bir $scope
değişkeni izlendiğini bildirmenin iki yolu vardır .
- İfadeyle şablonunuzda kullanarak
<span>{{myVar}}</span>
$watch
Servis aracılığıyla manuel olarak ekleyerek
Reklam 1) Bu en yaygın senaryodur ve eminim daha önce görmüştünüz, ancak bunun arka planda bir saat oluşturduğunu bilmiyordunuz. Evet, vardı! AngularJS yönergelerinin (örneğin ng-repeat
) kullanılması örtülü saatler de oluşturabilir.
Reklam 2) Kendi saatlerinizi bu şekilde yaratabilirsiniz . $watch
hizmet, ekli bir değer $scope
değiştiğinde bazı kodları çalıştırmanıza yardımcı olur . Nadiren kullanılır, ancak bazen yardımcı olur. Örneğin, 'myVar' her değiştiğinde bir kod çalıştırmak isterseniz, aşağıdakileri yapabilirsiniz:
function MyController($scope) {
$scope.myVar = 1;
$scope.$watch('myVar', function() {
alert('hey, myVar has changed!');
});
$scope.buttonClicked = function() {
$scope.myVar = 2; // This will trigger $watch expression to kick in
};
}
$ Apply, değişikliklerin özet döngüsüne entegre edilmesini sağlar
$apply
Fonksiyonu bir entegrasyon mekanizması olarak düşünebilirsiniz . Gördüğünüz gibi, doğrudan nesneye bağlı$scope
bazı izlenen değişkenleri her değiştirdiğinizde , AngularJS değişikliğin olduğunu bilecektir. Çünkü AngularJS bu değişiklikleri izlemeyi zaten biliyordu. Dolayısıyla, çerçeve tarafından yönetilen kodda gerçekleşirse, sindirim döngüsü devam eder.
Ancak, bazen AngularJS dünyasının dışında bir değer değiştirmek ve değişikliklerin normal olarak yayıldığını görmek istersiniz . Bunu düşünün - $scope.myVar
bir jQuery $.ajax()
işleyicisi içinde değiştirilecek bir değeriniz var . Bu gelecekte bir noktada olacak. AngularJS bunun gerçekleşmesini bekleyemez, çünkü jQuery'de beklemesi talimatı verilmemiştir.
Bununla başa çıkmak $apply
için tanıtıldı. Sindirim döngüsünü açıkça başlatmanızı sağlar. Ancak, bunu yalnızca bazı verileri AngularJS'ye (diğer çerçevelerle entegrasyon) geçirmek için kullanmalısınız, ancak bu yöntemi asla AngularJS bir hata atacağından normal AngularJS koduyla birlikte kullanmayın.
Tüm bunlar DOM ile nasıl ilişkilidir?
Eh, şimdi tüm bunları biliyorsunuz, gerçekten öğretici tekrar takip etmelisiniz. Özet döngüsü, $scope
hiçbir şeye bağlı olmayan tüm izleyicileri hiçbir şey değişmediği sürece değerlendirerek kullanıcı arayüzünün ve JavaScript kodunun senkronize kalmasını sağlar . Özet döngüsünde başka değişiklik olmazsa, iş bitmiş sayılır.
Nesneleri $scope
açık bir şekilde Denetleyici'de veya {{expression}}
doğrudan görünümde formda bildirerek nesneye ekleyebilirsiniz .
Umarım tüm bunlar hakkında bazı temel bilgileri açıklığa kavuşturur.
Diğer okumalar: