如何在angularjs中调用控制器内的javascript函数

时间:2016-09-11 10:56:35

标签: javascript angularjs

下面有一段代码片段。

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?

1 个答案:

答案 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方法中注入控制器是设计糟糕的结果。 使用工厂/服务来共享数据/服务。 我确信通过更多代码,我们可以为您提供更多帮助。