2014-09-11 69 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){},然后在另一个控制器中调用相同的函数,那么它应该可以工作。

或者替代解决方案是,如果它正在执行一些业务逻辑,或者您的要求是在其他地方使用,或者您的系统将来会像这样发展,那么您可以在角度服务中使用它。