2014-01-21 3 views
1

можно ли связать дату с сервисомProvider с $ watch?AngularJS - привязка к свойствам поставщика

Мой вопрос: могу ли я привязать данные службы поставщика к моему представлению?
Я пытаюсь связать объект $ get из представления в моем представлении, потому что поставщик загружается на фазе инициализации без контроллера.

Я пробую это на этом пути, но я не получаю никаких обновлений. http://plnkr.co/edit/t3PrE6lX1EDIMuqKyTW0?p=preview

<body ng-app="ServiceNotification"> 
    <div style="border-style:dotted" ng-controller="TimerCtrl1"> 
     TimerCtrl1<br/> 
     Last Updated: {{lastUpdated}}<br/> 
     Last Updated: {{calls}}<br/> 
    </div> 

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.js"></script> 
<script type="text/javascript"> 
    var app = angular.module("ServiceNotification", []); 

    function TimerCtrl1($scope, Timer) { 
     $scope.$watch(function() { return Timer.data; }, function (data){ 
      console.log("In $watch - data:" + data); 
      $scope.lastUpdated = data.lastUpdated; 
      $scope.calls = data.calls; 
     }, true); // <-- don't forgt the true 
    }; 

    app.provider("Timer", function() { 

     this.$get = function() { 
     var data = { lastUpdated: new Date(), calls: 0 }; 

      var updateTimer = function() { 
      data.lastUpdated = new Date(); 
      data.calls += 1; 
      console.log("updateTimer: " + data.lastUpdated); 

      window.setTimeout(updateTimer, 5000); 
     }; 
     updateTimer(); 

     return { 
      data: data 
     } 
     } 
    }); 
</script> 

Благодаря Thomas

+0

Пожалуйста, ваш код здесь, если ссылка истекает, или станет unaccessable, вопрос будет иметь меньше смысла. –

ответ

0

Вы получаете обновления не вызывает SetTimeout обратного вызова вызывается из цикла дайджеста. Существует специальная обертка $timeout в угловом (http://docs.angularjs.org/api/ng.$timeout), которую вы можете ввести в ваш метод $get.

app.provider("Timer", function() { 
    this.$get = function($timeout) { 
    var data = { lastUpdated: new Date(), calls: 0 }; 

    var updateTimer = function() { 
     data.lastUpdated = new Date(); 
     data.calls += 1; 
     console.log("updateTimer: " + data.lastUpdated); 
     $timeout(updateTimer, 5000); 
    }; 
    updateTimer(); 

    return { 
     data: data 
    } 
    } 
}); 

Демо: http://plnkr.co/edit/QUVuSnikIwVd3TocU7Vn?p=preview

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