2014-04-23 32 views
13

Açısal modeller setIntervaL ile çalışır mı?Açısal JS - Aralıklı Değişken Güncelleme

scope.testFunc = function(){ 
    setInterval(function(){ 
     scope.number--; 
    },1000); 
}; 

setInterval olmadan sayı her güncellenecektir:

İşte o setInterval OLMADAN günceller Nedense

<p>{{number}}</p> 
<button ng-click="testFunc()">TEST</button> 

var, ama böyle bunları yapmazsa .. bir örnek tıkla, ancak setInverval ile sürekli güncellenmez. Eğer her 5 saniyede bir tıklarsam, bir sayı kadar atlayacaktır (böylece arka planda çalışıyor ancak görünüm güncellenmiyor).

cevap

20

bunu DOM güncelleme değil bu yüzden dışarıda "açısal dünyasında" nin hangi setInterval kullandığınız olmasıdır. İki seçeneğiniz var, biri diğerinden çok daha iyi.

$interval'u kullanın. Açısal dünyanın bir parçası hariç setInterval gibi, bu değişiklikler de görünümünüzü güncelleyecektir (direktifinize $ aralığı ilettiğinizden emin olun).

scope.testFunc = function(){ 
    $interval(function(){ 
     scope.number--; 
    },1000); 
}; 

İkinci seçenek özet döngüsünü başlaması için mevcut koduna() uygulamak aramaktır, yapmayın o daha iyi bir seçenek olmadığı için olsa. yerine yerine değeri göstermek için <p ng-model="number"></p> kullanmayı deneyin {{ number }} kullanmak yerine, bir başka not olarak https://docs.angularjs.org/api/ng/service/ $ aralığı

:

+0

$ aralık kullanarak çalıştı ama döndü Hata: $ aralık tanımlı değil .... AMA $ digest() çalıştı – pashOCONNOR

+5

Evet. Bahsettiğim gibi kontrol cihazınıza $ interval vermelisiniz. angular.module ('myCtrl', işlev ($ kapsam, $ aralık) ... –

1

Açısal setInterval için güzel bir sarıcıyla birlikte gelir. Hemen hemen aynı şekilde kullanın. Ne oluyor

https://docs.angularjs.org/api/ng/service/$interval

+0

günlükleri Hata bu örneğe bakın: Aşağıdaki kodu Bkz $ aralığı tanımlanmadı – pashOCONNOR

+0

o enjekte olduğunu kontrol cihazınız? myApp.controller (function ($ kapsam, $ aralık) {...}) – tgeery

0

$ aralığı Eğer bu konuda daha fazla bilgi edinebilirsiniz kesinlikle çalışır.

-1

$ aralığını kullanarak çalıştı ancak hata döndürdü: $ aralık tanımlı değil .... AMA $ sindirmek() çalıştı:

scope.testFunc = function(){ 
    setInterval(function(){ 
     scope.number--; 
     scope.$digest(); 
    },1000); 
}; 
+2

Hayır! Cevabımda bahsettiğim nedenlerden dolayı bunu yapma. –

+1

Çalışmamanın sebebi, $ interval vermediğiniz içindir – Cybrix

6

açısal js aralığı için belgelere bakın Interval with Angular JS

Aralıkla çalışmak için $ digest kullanmayın.

HTML

<div ng-app ng-controller="ApplicationController"> 
    <pre>Number: {{ number }}</pre> 
    <button ng-click="testTimer()">Test Timer</button> 
</div> 

JS

function ApplicationController($scope,$interval) { 

    $scope.number = 99999; 

    $scope.testTimer = function() { 
     $interval(function() { 
      $scope.number--; 
     }, 100); 
    }; 
} 

action here