2016-04-19 34 views
0

我正忙于从AngularJS应用程序获取API数据。不过,我想知道是否有可能直接调用范围内的函数并正常调用它。

这是我在我的控制器:

var self = this; 
$scope.refreshData = (function() { 
    $http({ 
      method: 'GET', 
      url: './test-api/testdata.php' 
     }) 
     .success(function(data) { 
      self.apiData = data; 
     }); 
    console.log('Refresh executed'); 
})(); 

$interval(function() { 
    console.log('Refresh called'); 
    $scope.refreshData(); 
}, 60000); 

这将记录:

Refresh executed 
angular.js:13540 TypeError: $scope.refreshData is not a function 

我知道我可以将其更改为正常功能,并与$scope.refreshData()调用它,但我只是想知道在AngularJS中是否有一种方法。

+1

它在JavaScript中的规则相同! –

回答

1

$ scope.refreshData这里是未定义的,因为您赋给它的值是由IIFE返回的值。为了这个工作,你应该做到以下几点:

var self = this; 
($scope.refreshData = function() { 
    $http({ 
      method: 'GET', 
      url: './test-api/testdata.php' 
     }) 
     .success(function(data) { 
      self.apiData = data; 
     }); 
    console.log('Refresh executed'); 
})(); 

$interval(function() { 
    $scope.refreshData(); 
    console.log('Refresh called'); 
}, 60000); 

PS:你可以阅读更多关于它here

+0

读我的问题的最后一句话。我知道可以这样做,但我想知道是否可以直接调用它并稍后调用它(在我的示例中是间隔) – Patrick2607

+0

是的,我看到了,也适用于我。从来没有想过把'('放在'$ scope'之前。 – Patrick2607