2016-03-25 11 views
0

Im folgenden Code,

<!DOCTYPE html> 
<html ng-app="app14" ng-cloak> 
    <head> 
     <meta charset="UTF-8"> 
     <title> Angular built-in services</title> 
     <style> 
      [ng\:cloak], [ng-cloak], .ng-cloak{ 
       display: none; 
      } 

     </style> 
    </head> 
    <body> 
     <div ng-controller="mainCtrl as o"> 

      <!-- Using $interval service--> 
      Current time: {{o.time}} 

     </div> 
     <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js"></script> 
     <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular-sanitize.js"></script> 
     <script type="text/javascript" src="js/exam14.js"></script> 
    </body> 
</html> 

var app14 = angular.module('app14', ['ngSanitize']); 

function MainController($window, $location, $interval, $log, $exceptionHandler, $sanitize){ 
    /****************interval service*******/ 
    $interval(function(){ 
     var hour = new Date().getHours(); 
     var minutes = ('0' + new Date().getMinutes()).slice(-2); 
     var seconds = ('0' + new Date().getSeconds()).slice(-2); 

     this.time = hour + ":" + minutes + ":" + seconds; // 'this' refers to window but not to controller instance. 

    },2000); 
} 
app14.controller('mainCtrl', MainController); 

In dem obigen Code, $interval berechnet die Zeit für alle 2 Sekunden.

this.time bezieht sich offensichtlich auf window Objekt im $interval Rückruf.

Injizieren $scope in der MainController löst das Problem, aber Controller verwendet this Schlüsselwort, Controller-Instanz beziehen.

Wie kann ich auf {{o.time}} Instanz Mitglied in $interval Rückruf zugreifen?

+0

die Antwort akzeptieren Sie, wenn Sie es sehen arbeiten :) Danke – AhsanAyaz

Antwort

2

zu diesem Format ändern Code

var app14 = angular.module('app14', ['ngSanitize']); 

function MainController($window, $location, $interval, $log, $exceptionHandler, $sanitize){ 
    /****************interval service*******/ 
    var self = this; //you create a variable and pass the controller object into it 

    $interval(function(){ 
     var hour = new Date().getHours(); 
     var minutes = ('0' + new Date().getMinutes()).slice(-2); 
     var seconds = ('0' + new Date().getSeconds()).slice(-2); 

     self.time = hour + ":" + minutes + ":" + seconds; // use self rather than this. Because self points to the controller object now. 

    },2000); 
} 
app14.controller('mainCtrl', MainController); 

hoffe, das hilft