最近我在角度组件启动时初始化了一个函数。
我已经看过这个comment,我想知道它是否是一个好的模式,或者可以更好地声明函数并在下面的代码之后调用它:
angular.module('app').controller('control',[...,
function(){
...
var init = function () {
//what i wish run on launch
};
// function call to launch
init();
}
)
或如评论中所述:
(function(){
//code to run
}());
使用最后一种方法时,您使用了什么甚至是已知的问题?
答案 0 :(得分:0)
Till angular 1.4.x john Papa style guide首选使用1st方法调用interface
procedure Bewegen(Spieler:TImage);
..
procedure Bewegen(Spieler:TImage);
var Lefti,Topi:integer;
function wurf(AnzahlWurfel:integer):integer;
begin
randomize;
case AnzahlWurfel of 1 : result:=1+Random(6); //AZ von 1 bis 6 oder 12. Je nach Anzahl der Würfel.
2 : result:=1+Random(12);
end;
end;
procedure gehen(Wurf:integer;out Left, Top:integer);
var i:integer;
begin
for i:=1 to Wurf do if (Left<908) AND (Top=56) then Left:=Left+90//oben links nach oben rechts
else if (Left=908) AND (Top<956) then Top :=Top+90 //oben rechts nach unten rechts
else if (Left>8) AND (Top=956) then Left:=Left-90//unten rechts nach unten links
else if (Left=8) AND (Top>56) then Top :=Top-90;//unten links nach oben links
end;
begin
FMono.Edit1.Text:=IntToStr(wurf(AnzahlWurfel));
Lefti:=Spieler.Left;
Topi:=Spieler.Top;
gehen(wurf(AnzahlWurfel),Lefti,Topi);
Spieler.Left:=Lefti;
Spieler.Top:=Topi;
end;
函数,确保之前的所有内容都已初始化。我推荐相同的。
你不能在这里考虑第二种选择。它是一个IIFE,它更有可能在孤立的范围内定义你的功能,而不是在全球范围内声明它们。
除此之外,如果您特别谈论init
,那么您应该使用component
角度组件生命周期挂钩来调用初始化代码。
$onInit
答案 1 :(得分:0)
我建议你使用“可绑定成员在顶部”的主体,并使用函数声明而不是函数表达式,这样函数可以隐藏在控制器的底部,并将被提升。
angular.module('app').controller('control',[...,
function(){
// function call to launch
init();
// declare functions at bottom
function init() {
//what i wish run on launch
}
}
)