如何从控制器内部的javascript函数调用角度范围函数

时间:2016-06-02 14:30:19

标签: javascript angularjs angularjs-directive

我在该函数中有角度控制器和Javascript函数,我正在调用角度函数。我收到错误:$ scope.Name不是函数,$ scope.dates不是函数。

     function validation() {
            $scope.pageload = true;

            $scope.Name();
            $scope.dates();  
        }

        $scope.Name = function () {
           // do something
        }

        $scope.dates = function () {
          // do something       
        }

在控制器内正常工作

    var MyController = function ($scope, service)
    {


       function validation() {

            $scope.pageload = true;

            $scope.Name();
         $scope.dates();

        }

       $scope.Name = function () {


            // do something
        }

     $scope.dates = function () {

            // do something

    }


});


working:


var MyController = function ($scope, service)
{
 LoginHomeService.getHomeService(function (data) {
                $rootScope.CT1SessionObj = data.CT1SessionObj;

                        validation();



                                    }, function (response) {
                                        alert(response.Message);
                                    });

   function validation() {

        $scope.pageload = true;

        $scope.Name();
     $scope.dates();

    }

   $scope.Name = function () {


        // do something
    }

 $scope.dates = function () {

        // do something




});




Not working:

    var MyController = function ($scope, service)
    {
     LoginHomeService.getHomeService(function (data) {
                    $rootScope.CT1SessionObj = data.CT1SessionObj;

                            validation();


   function validation() {

        $scope.pageload = true;

         $scope.Name();
         $scope.dates();

        }

       $scope.Name = function () {


            // do something
        }

     $scope.dates = function () {

            // do something

    }


   }, function (response) {
    alert(response.Message);
   });


   });

3 个答案:

答案 0 :(得分:3)

$scope.Name

之上声明$scope.datesvalidation()

Javascript从上到下工作,因此您的功能$scope.Name$scope.Dates不存在'但是'。

另外,尽量不要使用' Name'作为一个功能。大多数这些词都是保留的关键词。

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

//myApp.directive('myDirective', function() {});
//myApp.factory('myService', function() {});

function MyCtrl($scope) {

    $scope.Name = function() {
    // do something
  }

  $scope.dates = function() {
    // do something       
  }

  function validation() {
    $scope.pageload = true;

    $scope.Name();
    $scope.dates();
  }
}

小提琴:http://jsfiddle.net/Lvc0u55v/4872/

更好的方法是约翰帕帕风格' :Y033

  

将可绑定成员放在控制器的顶部,按字母顺序排列,而不是通过控制器代码传播。

     

为什么?:将可绑定成员放在顶部使其易于阅读和   帮助您即时识别控制器的哪些成员   绑定并在视图中使用。

     

为什么?:在线设置匿名函数可以很容易,但是当这些   函数是超过1行代码,他们可以减少   可读性。定义可绑定成员下面的函数(   函数将被提升)移动实现细节,   使可绑定成员保持最佳状态,并使其更易于阅读。

/* avoid */
function SessionsController() {
    var vm = this;

    vm.gotoSession = function() {
      /* ... */
    };
    vm.refresh = function() {
      /* ... */
    };
    vm.search = function() {
      /* ... */
    };
    vm.sessions = [];
    vm.title = 'Sessions';
}


/* recommended */
function SessionsController() {
    var vm = this;

    vm.gotoSession = gotoSession;
    vm.refresh = refresh;
    vm.search = search;
    vm.sessions = [];
    vm.title = 'Sessions';

    ////////////

    function gotoSession() {
      /* */
    }

    function refresh() {
      /* */
    }

    function search() {
      /* */
    }
}

答案 1 :(得分:0)

正如@Harald Wiesinger所说,在调用函数之前声明调用函数。

答案 2 :(得分:-1)

在范围功能

之后进行验证
$scope.Name = function () {
   // do something
}

$scope.dates = function () {
  // do something       
}

function validation() {
    $scope.pageload = true;

    $scope.Name();
    $scope.dates();  
}