angularjs在事件中调用控制器的函数

时间:2015-03-27 15:15:52

标签: javascript angularjs events

我对AngularJS有一个问题,就是我在我的控制器中编写了一个函数,我想在事件列表器中调用它,但是我得到了不确定!!

代码控制器如下所示:

inputApp.controller('my_controller', ['$scope', '$upload', '$http', '$filter', '$sce', '$timeout', 
    function ($scope, $upload, $http, $filter, $sce, $timeout) {
                $scope.changeBlock = function (block) {
                    // DO SOMETHING
                };
                $scope.$on('$locationChangeStart', function($scope, next, current){
                       // Calling the following function makes an error
                       $scope.changeBlock('Block_NAME');
                       $scope.preventDefault();                
                });
}]);

所以在$ scope内调用该函数。$ on .....出错:

错误:$ scope.changeBlock不是函数!!

你能帮助我吗,我如何在该列表中调用我的功能?!

此致 瓦埃勒

2 个答案:

答案 0 :(得分:1)

你混淆了事件处理程序的签名,并错误地覆盖了你的$ scope变量。事件处理程序的第一个参数是“event”而不是“$ scope”:

这应该有效:

inputApp.controller('my_controller', ['$scope', '$upload', '$http', '$filter', '$sce', '$timeout', 
    function ($scope, $upload, $http, $filter, $sce, $timeout) {
            $scope.changeBlock = function (block) {
                // DO SOMETHING
            };

         // before:
         // $scope.$on('$locationChangeStart', function($scope, next, current){
         // now:
            $scope.$on('$locationChangeStart', function(event, next, current){
                   // Calling the following function makes an error
                   $scope.changeBlock('Block_NAME');
                   $scope.preventDefault();                
            });
}]);

答案 1 :(得分:0)

将第一个参数名称$scope$scope.$on('$locationChangeStart', function($scope, next, current){更改为其他