[英]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 !");
}
});
Heare是一篇很好的文章-http: //www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html
PS實際上,在實際實踐中我看不出有任何理由這樣做...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.