SORU
5 HAZİRAN 2013, ÇARŞAMBA


Nasıl AngularJS model değişiklikleri izlerken ilk yük inkar ediyor muyum?

Kapsam $derin bir grafik olarak oturur tek bir varlık, editör olarak hizmet veren bir web sayfası var.fieldcontainer özellik. GERİSİ benim API yanıt aldıktan sonra () $kaynak) izle ekliyorum ''. fieldcontainer Bu izlersem sayfa/varlık olup olmadığını tespit etmek için kullanıyorum"". kirli Şimdi Kaydet düğmesini sıçrama yapıyorum ama kullanıcı modeli dirties. kadar Kaydet düğmesine görünmez yapmak istiyorum gerçekten.

Alıyorum ne oluyor çünkü bence bu saat, tek bir tetikleyici olduğunu .= ... atama hemen saatimi oluşturduktan sonra gerçekleşir fieldcontainer. Düşünüyordum sadece kullanarak bir "dirtyCount" özelliğini absorbe ilk yanlış alarm ama bu hissi çok hacky ... ve düşündüm orada olması gerekiyor "Açısal deyimsel" yol için anlaşma ile bu ben değilim sadece birini kullanarak bir saat için tespit kirli bir model.

İşte benim saatim set kod:

 $scope.fieldcontainer = Message.get({id: $scope.entityId },
            function(message,headers) {
                $scope.$watch('fieldcontainer',
                    function() {
                        console.log("model is dirty.");
                        if ($scope.visibility.saveButton) {
                            $('#saveMessageButtonRow').effect("bounce", { times:5, direction: 'right' }, 300);
                        }
                    }, true);
            });

Ben sadece temiz bir yolu olmalı kendime, "kirletme boyası" "(dirtyCount >kod UI koruyan daha bunu yapmaya devam 0)"...

CEVAP
20 EYLÜL 2013, Cuma


Dinleyici denir ilk kez, eski değeri ve yeni değeri aynı olacaktır. O zaman, sadece bu

$scope.$watch('fieldcontainer', function(newValue, oldValue) {
  if (newValue !== oldValue) {
    // do whatever you were going to do
  }
});

Bu aslında Açısal recommend handling it dokümanlar yoludur:

Bir izleyici kapsamı ile kayıtlı sonra, dinleyici fn watcher başlatmak için zaman uyumsuz olarak ($evalAsync) denir. Nadiren de olsa, bu dinleyici watchExpression sonucu değiştirmedi denir çünkü istenmeyen bir durumdur. Dinleyici fn içinde bu senaryo algılamak için, newVal ve oldVal karşılaştırabilirsiniz. Bu iki değer aynıdır (===) eğer dinleyici başlatılması nedeniyle çağrıldı

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Sergio Lafuente Rubio

    Sergio Lafue

    11 Aralık 2008
  • technodromeband's channel

    technodromeb

    28 NİSAN 2011
  • Wild Academy

    Wild Academy

    8 Aralık 2009