2015-09-22 29 views
0

index.html is:獲得 「未捕獲的ReferenceError:updateClock沒有定義」 的錯誤在AngularJS應用

<html ng-app="clock"> 

<head> 
    <script type="text/javascript" src="angular.js"></script> 
    <script type="text/javascript" src="app.js"></script> 

</head> 

<body> 

    <h1 ng-controller="ClockController">{{clockTime}}</h1> 


</body> 
</html> 

And app.js is:

var app = new angular.module('clock',[]); 
(function(){ 

    app.controller('ClockController',function($scope){ 
     this.updateClock = function(){ 
      $scope.clockTime = new Date(); 
     }; 

     setInterval(function(){ 
      $scope.$apply(updateClock); 
     },1000); 
     this.updateClock(); 
    }); 

})(); 

當我訪問index.html我一直在1秒鐘後收到以下錯誤。

Uncaught ReferenceError: updateClock is not defined

我已經定義updateClocksetInterval之前被稱爲仍然爲什麼我得到這個消息?

回答

1

因爲你的功能updateClock在對象this上定義。當你在區間內調用它時,JS引擎找不到你的函數定義。更改爲:

app.controller('ClockController',function($scope) { 
    function updateClock() { 
     $scope.clockTime = new Date(); 
    }; 

    setInterval(function() { 
     $scope.$apply(updateClock); 
    }, 1000); 

    updateClock(); 
}); 

順便說一句,使用該服務$interval,而不是setInterval。通過這種方式,你不需要明確地調用$apply

app.controller('ClockController', function($scope, $interval) { 
    ... 
    $interval(function() { 
     updateClock(); 
    }, 1000); 
    ... 
}); 
1

請更改

this.updateClock = function(){ 
      $scope.clockTime = new Date(); 
     }; 

var updateClock = function(){ 
      $scope.clockTime = new Date(); 
     }; 

updateClock在區間功能的範圍內都有效。使用這個關鍵字可以將功能分配給控制器功能的屬性,但它不會使updateClock可用作變量。

+0

你指的是什麼「父功能」? – user4904589

+1

它是控制器的功能 – udalmik

1

我認爲最好的方式來達到你想達到什麼是這樣:

angular.module('clock', []) 
.controller('ClockController',function ($scope, $interval) { 
    $scope.clockTime = new Date(); 

    var id = $interval(function() { 
     $scope.clockTime = new Date(); 
    }, 1000); 

    $scope.$on('$destroy', function() { 
     $interval.cancel(id); 
    }); 
}); 

不要忘記清潔上$destroy事件的時間間隔

相關問題