angularjs从控制器内部调用函数

时间:2014-12-22 03:06:02

标签: javascript angularjs

pokeApp.controller('mycontroller', function($scope, $routeParams){


   // part 1: // why would this not work
   $scope.myFunc();     

   $scope.myFunc = function(){
       console.log("Hi !");
   }

   // part 2: // why would this not work

  this.helloWorld();
  this.helloWorld = function(){
       console.log("Hello World");
  }
}

您好 我的问题是为什么这两件事不起作用;我的意思是要么在控制器中,要么在范围内。我知道我可以调用一个简单定义的函数'函数helloWorld(){...}'

谢谢!

3 个答案:

答案 0 :(得分:1)

您在定义之前调用该函数。将您的代码更改为:

   $scope.myFunc = function(){
       console.log("Hi !");
   }
   $scope.myFunc();   

答案 1 :(得分:1)

您希望功能提升发生:



    myFunct(); 

    function myFunct() {
        alert('hey');
    }




这会奏效。

但这不会:



myFunct(); 

var myFunct = function() {
    alert('hey');
}




类似的情况与控制器范围属性一起进行,在这种情况下,其行为与常规变量完全相同,意味着不会发生提升。

你会在这里找到一些很好的解释:var functionName = function() {} vs function functionName() {}


因此,要使原始代码中的所有内容都使用提升功能,它应如下所示:

pokeApp.controller('mycontroller', function($scope, $routeParams){


   // part 1:
   myFunc();     

   function myFunc(){
       console.log("Hi !");
   }

   // part 2:

  helloWorld();
  function helloWorld(){
       console.log("Hello World");
  }
}

或者,一种维持范围的小方法:

pokeApp.controller('mycontroller', function($scope, $routeParams){


   // part 1:
   $scope.myFunc = myFunc; // this is the key, assigns a hoisted function value
                           // to the $scope object property which is then ready
   $scope.myFunc();     

   function myFunc(){
       console.log("Hi !");
   }

   // part 2:
  this.helloWorld = helloWorld;
  this.helloWorld();
  function helloWorld(){
       console.log("Hello World");
  }
}

这是一个显示实际操作的片段:



    var myObj = {};
    myObj.f = myFunct;
    myObj.f(); 

    function myFunct() {
        alert('yay, it still works!');
    }




答案 2 :(得分:0)

您可以使用吊装来执行此操作:

app.controller('MainCtrl', function($scope) {

  $scope.myFunc = myFunc;
  $scope.myFunc();

  function myFunc(){
    console.log("Hi !");
  }

});

plunk

Heare是关于它的好文章 - http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html

P.S。 实际上,在实际操作中,我无法看到任何理由......