Angular.js: рдирд┐рдпрдВрддреНрд░рдХ рд╣реБрдХ рдСрд░реНрдбрд░ рдХрд░рддреЗ рд╣реИрдВ ($onChanges рдХреЛ $onInit рд╕реЗ рдкрд╣рд▓реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)

рдХреЛ рдирд┐рд░реНрдорд┐рдд 16 рджрд┐рд╕ре░ 2016  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: angular/angular.js

рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдЪрд╛рд╣рддрд╛ рд╣реИ рдпрд╛ рдЕрдЧрд░ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ

рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИ?
рдкрд╣рд▓рд╛ $onChanges рдХреЙрд▓ $onInit рдПрдХ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреЛрдгреАрдп 1.6 рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (рдкреНрд░реАрдЕрд╕рд╛рдЗрди = рдЭреВрдард╛) рдХреЗ рд╕рд╛рде, $onInit рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХрдВрдЯреНрд░реЛрд▓рд░ рд╕реНрдЯреЗрдЯреНрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдЕрднреА рддрдХ рдПрдХреНрд╕реЗрд╕ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИ?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ $onInit рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рддрд╛рд░реНрдХрд┐рдХ рд╣реЛрдЧрд╛ред
рдирд┐рдпрдВрддреНрд░рдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдХреЛрдгреАрдп рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рдгрд╛/рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдХреНрдпрд╛ рд╣реИ?
рдпрджрд┐ рд╣рдо $onInit рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ $onChanges рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмрдирд╛рдИ рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ; рд╣рдореЗрдВ рдкрд╣рд▓реА рдХреЙрд▓ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдЕрднреА рддрдХ рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдЕрдВрджрд░ рдЙрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬрдЧрд╣реЛрдВ рдкрд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВрдЧреЗ ...

рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рдПрдВрдЧреБрд▓рд░ рдХреЗ рдХреМрди рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдХреМрди рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░/рдУрдПрд╕ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реИрдВ? рдХреГрдкрдпрд╛ рдирд╡реАрдирддрдо рд╕реНрдерд┐рд░ рдФрд░ рд╕реНрдиреИрдкрд╢реЙрдЯ (https://code.angularjs.org/snapshot/) рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рднреА рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред
рдХреЛрдгреАрдп 1.6 рд╕рдВрд╕реНрдХрд░рдг

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрд╣ рдЗрд░рд╛рджрд╛ рд╣реИ (рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХреЛрдгреАрдп 2+ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП)ред рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк рдирд╣реАрдВ рджреЗрдЦ рдкрд╛рдП рд╣реИ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ (рдкреВрд░реНрд╡ $ onInit) рдХреЙрд▓ рд╣реИ $onChanges , рдХреА рд╡рд╛рдкрд╕реА рдорд╛рди рдХреА рдЬрд╛рдБрдЪ рдХрд░рдХреЗ isFirstChange() рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреА рд╡рд┐рдзрд┐ SimpleChange рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕:

{
  ...
  bindings: {foo: '<'},
  controller: function SomeController() {
    this.$onChanges = function(changes) {
      if (changes.foo.isFirstChange()) {
        // `$onInit()` has not been called yet...
      }
    };
  }
}

#

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реА рдкрд╣рд▓реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╣реА рдереАред рдорд╛рдирд╕рд┐рдХ рдореЙрдбрд▓ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдпрд╣ рд╕реЛрдЪрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ $onInit() рдкрд╣рд▓реА рдЪреАрдЬ рд╣реИ рдЬреЛ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рд╣реЛрддреА рд╣реИ; рдлрд┐рд░ $onChanges() , $onChanges() , $onChanges() рдФрд░ рдЕрдВрдд рдореЗрдВ $onDestroy() ред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ $onInit рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ, (рдкрд╣рд▓реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд) рдорд╛рдиреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдмрджрд▓реЗ рдореЗрдВ $onChanges рдорд╛рдзреНрдпрдо рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдмрдВрдж рдХрд░рдирд╛, рдЪреВрдВрдХрд┐ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ (рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЬреИрд╕рд╛ рдЗрд░рд╛рджрд╛ рд╣реИ: рдкрд▓рдХ :)ред

рд╕рднреА 9 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣ рдЗрд░рд╛рджрд╛ рд╣реИ (рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХреЛрдгреАрдп 2+ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП)ред рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк рдирд╣реАрдВ рджреЗрдЦ рдкрд╛рдП рд╣реИ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ (рдкреВрд░реНрд╡ $ onInit) рдХреЙрд▓ рд╣реИ $onChanges , рдХреА рд╡рд╛рдкрд╕реА рдорд╛рди рдХреА рдЬрд╛рдБрдЪ рдХрд░рдХреЗ isFirstChange() рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреА рд╡рд┐рдзрд┐ SimpleChange рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕:

{
  ...
  bindings: {foo: '<'},
  controller: function SomeController() {
    this.$onChanges = function(changes) {
      if (changes.foo.isFirstChange()) {
        // `$onInit()` has not been called yet...
      }
    };
  }
}

#

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реА рдкрд╣рд▓реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╣реА рдереАред рдорд╛рдирд╕рд┐рдХ рдореЙрдбрд▓ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдпрд╣ рд╕реЛрдЪрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ $onInit() рдкрд╣рд▓реА рдЪреАрдЬ рд╣реИ рдЬреЛ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рд╣реЛрддреА рд╣реИ; рдлрд┐рд░ $onChanges() , $onChanges() , $onChanges() рдФрд░ рдЕрдВрдд рдореЗрдВ $onDestroy() ред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ $onInit рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ, (рдкрд╣рд▓реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд) рдорд╛рдиреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдмрджрд▓реЗ рдореЗрдВ $onChanges рдорд╛рдзреНрдпрдо рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдмрдВрдж рдХрд░рдирд╛, рдЪреВрдВрдХрд┐ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ (рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЬреИрд╕рд╛ рдЗрд░рд╛рджрд╛ рд╣реИ: рдкрд▓рдХ :)ред

рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдЕрдм рд╕реНрдкрд╖реНрдЯ рд╣реИ :)

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЬрд╛рдирдмреВрдЭрдХрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдЧрд░ рд╣рдо $onChanges() рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ $onInit() рдХреЗ рдЕрдВрджрд░ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреИрд╕реЗред

@рднрд╛рд░рддрдкрд╛рдЯрд┐рд▓ , рдЗрд╕реЗ рдПрдВрдЧреБрд▓рд░рдЬреЗрдПрд╕ (1.x.) рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдПрдВрдЧреБрд▓рд░ (2+) рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЕрдЧрд░ (рдмрджрд▓рд╛рд╡.foo.isFirstChange ()) {
// $onInit() рдХреЛ рдЕрднреА рддрдХ рдХреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ...
}

@gkalpak рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рддрд░реНрдХ рдЧрд▓рдд рд╣реИред binding.isFirstChange() рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рдд рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддреА рд╣реИ рдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рд╕реЗрд╡рд╛ рдХреЙрд▓ рдХреЗ рдмрд╛рдж рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреЛ рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ controller.$onInit рд╡рд┐рдзрд┐ рдХреЛ controller.$onChanges рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╣рд▓реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рдореИ рдЧрд▓рдд рд╣реБ?

рдПрдХ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рд╣рдореЗрд╢рд╛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рдореВрд▓реНрдп рд╣реЛрддрд╛ рд╣реИ (рд╣реЛ рд╕рдХрддрд╛ рд╣реИ undefined ), рдЬреЛ рдХрд┐ рдЗрд╕рдХреЗ рдкреВрд░реНрд╡-рдЖрд░рдВрднрд┐рдХ рдореВрд▓реНрдп рд╕реЗ рд╣рдореЗрд╢рд╛ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, $onChanges() рд╣рдореЗрд╢рд╛ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ changes.foo рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ $onInit() ред

рдпрд╣ рддрд╛рд░реНрдХрд┐рдХ рдЕрд░реНрде рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмрдВрдзрди рдХрд╛ рдореВрд▓реНрдп рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╢рдмреНрдж рдХреА рд╢рдмреНрджрдХреЛрд╢ рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ (рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рди рд╕реЗрдЯ рдХрд░реЗрдВ)ред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реИ рддреЛ рдЖрдк рдХреБрдЫ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд╛рдордХрд░рдг рдпрд╣рд╛рдВ рдЧрд▓рдд рдФрд░ рдЕрдкреНрд░рд╛рдХреГрддрд┐рдХ рд╣реИред

рдореБрдЭреЗ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рдЗрд╕ рдХреЛрдб рдХреА рддрд░рд╣ рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

$onChanges(changesObj: { [index: string]: angular.IChangesObject; })  {
   if (!this.isInitialized) return;
   ...
}

"рдЖрд░рдВрднреАрдХрд░рдг" рд╕реЗ рдкрд╣рд▓реЗ "рдкрд░рд┐рд╡рд░реНрддрди" рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

рдХреЛрдгреАрдп рдХреЗ рд╕рд╛рде рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдмрд░рд╛рдмрд░ ... рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдИ рднреА init рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХреНрдпреЛрдВ рдХрд░реЗрдЧрд╛?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

tdumitrescu picture tdumitrescu  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

awerlang picture awerlang  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jetta20162 picture jetta20162  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

landed1 picture landed1  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jtorbicki picture jtorbicki  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ