2014-09-11 71 views
2

我寫了一個模塊,以保持我所有的輔助功能(scripts/apps.js)軌跡:JS錯誤與角JS模塊

angular.module('app', ['ngResource']).run(function($scope){ 

$scope.UTIL = { 

setup_pod_variables: function (pods){...} 
... 

}); 

我試圖調用從另一個目錄中定義我的控制器的輔助函數:腳本/控制器/Dashboard.js:

scope.UTIL.setup_pod_variables(pods);

我已經包含了其他模塊:

var pods = angular.module('app', []);

但似乎我仍然得到一個錯誤:

TypeError: Cannot read property 'setup_pod_variables' of undefined 
at new <anonymous> (file:///Users/simon_zhu/Documents/nautilus/app/scripts/controllers/Dashboard.js:16:12) 
at d (file:///Users/simon_zhu/Documents/nautilus/app/scripts/angular.min.js:30:346) 
at Object.instantiate (file:///Users/simon_zhu/Documents/nautilus/app/scripts/angular.min.js:30:475) 
at file:///Users/simon_zhu/Documents/nautilus/app/scripts/angular.min.js:61:228 
at file:///Users/simon_zhu/Documents/nautilus/app/scripts/angular.min.js:48:320 
at q (file:///Users/simon_zhu/Documents/nautilus/app/scripts/angular.min.js:7:380) 
at W (file:///Users/simon_zhu/Documents/nautilus/app/scripts/angular.min.js:48:186) 
at f (file:///Users/simon_zhu/Documents/nautilus/app/scripts/angular.min.js:42:268) 
at f (file:///Users/simon_zhu/Documents/nautilus/app/scripts/angular.min.js:42:285) 
at f (file:///Users/simon_zhu/Documents/nautilus/app/scripts/angular.min.js:42:285) 

什麼想法?

回答

1

效用函數和數據放置在一個服務中更好,然後它可以從任何地方訪問。

您的問題是$模塊中的$ scope與您的控制器中的$ scope不同。

服務解決方案會是這個樣子(因爲它是從我的頭寫,而不是測試可能包含一些錯誤)

angular.module('app',[]).factory('utils', function(){ 
    return { setup_pod_variables: function(pods){...}};  
} 

angular.module('app').controller('myController', ['utils', function(utils){ 
    utils.setup_pod_variables(...); 
}]) 
0

你好這個功能應該在$ rootScope而非控制器(儀表板來定義。 js)本地$範圍,那麼只有你可以在其他控制器中使用它。

只需在DashBoard.js中創建$ rootScope.UTIL.setup_pod_variables(pods){},然後在另一個控制器中調用相同的函數,那麼它應該可以工作。

或者替代解決方案是,如果它正在執行一些業務邏輯,或者您的要求是在其他地方使用,或者您的系統將來會像這樣發展,那麼您可以在角度服務中使用它。