2016-03-25 33 views
1

Hey im yapı işlevselliği açısal ama bazı problemler var. Bunun gibi bir model ve örnek yönerge var.

<input ng-model="model" type="text" class="form-control"> 
 
<div example-dir test="model"></div>

Ben $ zaman aşımı başlangıç ​​yönergesine giriş ve bu modelden her yeni val gelen modelimizi geçmek istiyorum, ama ilk yeni val $ zaman aşımı başlamalıdır , ancak her bir sonraki Yeni val, $ zaman aşımımızı yeniden başlatmalı. Örneğin,

. Verileri girerken $ timeout başlangıcını başlattığımızda (eaxmple için 1000 msn), ancak sonraki her bir data $ timeout'umuzu 0'a yeniden başlatmalı ve tekrar start etmeye başlamalıdır.

function link(scope, element, attr) { 
 
     
 
     scope.$watch('test',function(nval){ 
 
     var timeout; 
 
     function incrementTimer(){ 
 
      //some stuff 
 
     } 
 
      if(nval){ 
 

 

 
       timeout = $timeout(incrementTimer, 1000); 
 
       $timeout.cancel(timeout); 
 

 
      } 
 
     }); 
 
        
 
      
 
    }

Ben fikir ve pas $ zaman aşımı varsa ve corectly çalışmayı iptal yok:

benim yönergesi kodu vardır. Yardım için teşekkürler.

cevap

2

Yaptığınız şey, her yineleme ile timeout değişkenini yeniden bildirmektir. Sadece sıfırlamak sonra bağlantı fonksiyonunda zaman aşımı bildirmek ve: şaşırtıcı basit cevap

link: function (scope) { 
    function myFunc() { console.log('tick'); }  
    var timeout; 

    scope.$watch(function() { 
     return scope.test; 
    }, function (newVal, oldVal) { 
     if (timeout) { 
      $timeout.cancel(timeout); 
     } 
     timeout = $timeout(myFunc, 1000); 
    }); 
} 

Fiddle

+1

Teşekkür! –

+0

Kapsam. $ Watch değerinin boş olup olmadığını nasıl kontrol edebileceğimi söyleyebilir misiniz? –

+0

@JanKowalski 'newVal' ve 'oldVal' var. Güncellenen değerin istiyorsanız, eğer 'if (! NewVal) {// değer boş '} işaretini kontrol edin –