2015-05-03 2 views
2

Хорошо я иметь следующий HTML:

<timer countdown="30" interval="1000"> 
{{seconds}} 
percent 
</timer> 
{{timerSeconds}} 

Для этого я есть следующий код контроллера:

$scope.timerRunning = true; 
$scope.timerSeconds = 100; 
$scope.$on('timer-tick',function(e, val) { 
    $scope.timerSeconds = (Math.floor(val.millis/1000)/30 * 100); 
}); 

Однако вид timerSeconds не обновляется. Я проверил событие путем отладки и обнаружил, что он выполняет функцию и меняет значение timerSeconds.

+0

Добавление большего количества кода может помочь нам понять, что происходит. Не могли бы вы создать файл plnkr/jsfiddle? –

ответ

3

после этой строки:

$scope.timerSeconds = (Math.floor(val.millis/1000)/30 * 100); 

добавить

$scope.apply(); 

Так что AngularJS проверить, есть ли изменения в моделях и засавить их.

Во многих случаях AngularJS не может dected изменения модели, особенно в асинхронная функции, такие как $on()

подробнее об этом: When to use $scope.$apply()

Если dosn't работу, используйте AngularJS $ таймаут функция

$scope.$on('timer-tick',function(e, val) { 
    $timeout(function(){ 
     $scope.timerSeconds = (Math.floor(val.millis/1000)/30 * 100); 
    }) 
}); 
+0

К сожалению, этого не делал трюк: S –

+0

Можете ли вы, пожалуйста, обернуть свой код в jsfiddle.net – Sn0opr

+0

оберните свой $ scope.timerSeconds = (Math.floor (val.millis/1000)/30 * 100); в $ timeout callback и повторите попытку (удалите $ scope. $ apply()) – Sn0opr

Смежные вопросы