下面有一段代码片段。
sample.js
(function() {
/*global angular */
'use strict';
angular.module('myapp', ['spinner'])
.controller('myCtrl', ['$scope', '$window', function ($scope, $window ) {
$scope.methodname = function() {
if(something){
/* Doing some operations */
}
};
/* Here I need to define the callme javascript function */
function callme(response){
/* If I call like this, I'm getting error in console. */
}
}]); /* Controller ends here */
/* Creating a new anonymous function to perform some operations */
(function () {
'use strict';
/* Edited */
code.util.myHTTP(url, function (response) {
// Adding response to session storage
callme(response);
}, function () {
// Removing from session storage
});
})();
}());
在这里,我无法在角度控制器内部调用callme javascript函数。 我在控制台中遇到错误,如
Uncaught ReferenceError: callme is not defined
有没有办法实现这个目标?
修改
我需要在callme函数中使用一些控制器参数,这就是我在控制器中定义callme函数的原因。
我已经在我的js文件中运行了如下面的函数
.run(function($rootScope, $log, $window) {
});
我应该如何在这里附加myCtrl?
答案 0 :(得分:1)
肮脏的方式
首先,如果你想使用你的callme
控制器功能,那么你必须公开它。正如你所写,它仍然是私人的。为了公开,只需"追加"它是你控制器的范围(正如你对scope.methodname
所做的那样):
...
$scope.callme = function(){
...
}
..
然后,在模块中使用此功能,以便可以访问控制器:
angular.module('amodule').run(['myCtrl ', function(myCtrl){
myCtrl.callme();
}]);
另一种方式
最好的办法是使用工厂,因为您想共享服务:
angular.module('myapp').factory('myservice', function(){
function callme(){
// TODO : implement the service
}
return {
callme:callme
};
});
然后在新模块中,调用该方法:
angular.module('amodule').run(['myservice ', function(myservice){
myservice.callme();
}]);
如果你想在角度以外调用该服务(如你所愿):
angular.injector(['myservice']).get('callme').call();
编辑:
您可以在一次运行中声明注入服务或控制器。它会工作。
请记住,在模块的run
方法中注入控制器是设计糟糕的结果。
使用工厂/服务来共享数据/服务。
我确信通过更多代码,我们可以为您提供更多帮助。