在角度分量启动时初始化函数的模式

时间:2017-07-04 19:34:51

标签: javascript angularjs design-patterns angularjs-components

最近我在角度组件启动时初始化了一个函数。

我已经看过这个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
}());

使用最后一种方法时,您使用了什么甚至是已知的问题?

2 个答案:

答案 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
    }

  }
)

参考:John Papa Angular Style guide