2014-03-07 21 views
0

比方說您有這個在您的控制器:運行在控制器的啓動功能,角JS

$scope.filterProductsByCategory = function(category){ 
... 
} 

我想這個控制器被加載運行每次。

但如果我這樣做:

$scope.filterProductsByCategory(category) 

$scope.filterProductsByCategory = function(category){ 
... 
} 

我得到:

TypeError: Object #<Scope> has no method 'filterProductsByCategory' 

任何想法?

+0

嘗試將此調用放在控制器定義的末尾 – Cherniv

回答

0

JavaScript解釋器只知道它讀取的函數。所以,如果你翻轉函數的定義(稱之爲它被定義之後)都應該是不錯的:

$scope.filterProductsByCategory = function(category){ 
... 
} 

$scope.filterProductsByCategory(category) 

然而,我發現ng-init是在控制器的東西會表現更好的方法在初始化運行:

HTML:

<div ng-init="init()"></div> 

JS:

$scope.init = function() { 

    $scope.filterProductsByCategory(category) 
} 

//define functions 
$scope.filterProductsByCategory = function(category){ 
... 
} 
0

在您嘗試使用它的情況下發生$ scope.filterProductsByCategory分配。
所以總之先指定,然後使用它。

另一方面,如果該函數僅用於控制器內部,我建議您不要將其納入範圍。

你可以做這樣的事情:

(function(category){ 
... 
}()); 

作爲一個側面說明你的函數看起來像一個過濾器,那麼也許你需要把它變成角度濾波器。