簡體   English   中英

angularjs從控制器內部調用函數

[英]angularjs calling a function from inside a controller

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");
  }
}

嗨,我的問題是,為什么這兩種方法不起作用? 我的意思是要么在控制器中,要么在示波器中。 我知道我可以調用一個簡單定義的函數'function helloWorld(){...}'

謝謝 !

您在定義函數之前就在調用它。 將您的代碼更改為:

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

您期望功能提升發生:

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

這會工作。

但這不會:

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

控制器作用域屬性也發生了類似的情況,在這種情況下,它的行為與常規變量完全相同,這意味着不會發生起吊。

您將在此處找到有關提升的一些很好的解釋: var functionName = function(){}與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!'); } 

您可以使用提升來做到這一點:

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

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

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

});

unk

Heare是一篇很好的文章-http: //www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html

PS實際上,在實際實踐中我看不出有任何理由這樣做...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM