Angular.js: NgModel рдХреЛ рдлрд╝реЙрд░реНрдореЗрдЯрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реАрдХреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 31 рдЬреБрд▓ре░ 2013  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: angular/angular.js

рдпрд╣ рдмреЗрд▓рд╛ рджреЗрдЦреЗрдВ:
http://jsfiddle.net/tPWBK/1/

рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдирд┐рд░реНрджреЗрд╢ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП 'ngModel' рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдлрд╝реЙрд░реНрдореЗрдЯрд░ рдФрд░ рдкрд╛рд░реНрд╕рд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрджрд┐ рдкрд░рд┐рд╡рд░реНрддрди $modelValue рдпрд╛ $viewValue рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдЧрддрд┐рд╢реАрд▓ рдбреЗрдЯрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ, рддреЛ рдЙрд╕ рдбреЗрдЯрд╛ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдФрд░ рдлрд╝реЙрд░реНрдореЗрдЯрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

https://github.com/angular/angular.js/blob/master/src/ng/directive/input.js#L1081 рд╕реЗ рдпрд╣ рдЕрдВрд╢ рджреЗрдЦреЗрдВ

$scope.$watch(function ngModelWatch() {
  var value = ngModelGet($scope);

  // if scope model value and ngModel value are out of sync
  if (ctrl.$modelValue !== value) {

    var formatters = ctrl.$formatters,
        idx = formatters.length;

    ctrl.$modelValue = value;
    while(idx--) {
      value = formatters[idx](value);
    }

    if (ctrl.$viewValue !== value) {
      ctrl.$viewValue = value;
      ctrl.$render();
    }
  }
});

рдХреНрдпрд╛ (ctrl.$modelValue !== value) рдХреЗ рдЕрдВрджрд░ рд╕рдм рдХреБрдЫ рдПрдХ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ NgModelController рдкрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЙрдЬрд╛рдЧрд░ рд╣реЛ?

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

+1 рдпрд╣ рд╣реЛрдирд╛ рд╡рд╛рдХрдИ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдПрд╕рд┐рдВрдХреНрд╕ рдлреЙрд░реНрдореЗрдЯрд░реНрд╕ рдФрд░ рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреА рдХрдореА рдПрд╕рд┐рдВрдХреНрд╕ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рдмреБрд░рд╛ рдмрдирд╛рддреА рд╣реИред рдпрд╣ async рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рд╡рд┐рд░реБрджреНрдз рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рддреНрдпрд╛рдкрди рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХреА рдЧрдИ рдХреБрдЫ рджреМрдбрд╝ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред

рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕реЗ @jpsimons рдХреЗ рд╕рдорд╛рди рд╣реА рдХрд┐рдпрд╛:

scope.$watch('myAsyncCollection', () => {
  ngModel.$viewValue = ngModel.$formatters.reduceRight((prev, fn) => fn(prev)), ngModel.$modelValue)
  ngModel.$render()
})

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

рдЦреИрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЙрд╕ рдмреНрд▓реЙрдХ рдХреЛ рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдХреЙрдкреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдм рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рд╛рдорд╛рди рд╣реИред рдпрджреНрдпрдкрд┐ рдЖрдкрдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

+1 рдпрд╣ рд╣реЛрдирд╛ рд╡рд╛рдХрдИ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдПрд╕рд┐рдВрдХреНрд╕ рдлреЙрд░реНрдореЗрдЯрд░реНрд╕ рдФрд░ рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреА рдХрдореА рдПрд╕рд┐рдВрдХреНрд╕ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рдмреБрд░рд╛ рдмрдирд╛рддреА рд╣реИред рдпрд╣ async рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рд╡рд┐рд░реБрджреНрдз рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рддреНрдпрд╛рдкрди рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХреА рдЧрдИ рдХреБрдЫ рджреМрдбрд╝ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред

рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕реЗ @jpsimons рдХреЗ рд╕рдорд╛рди рд╣реА рдХрд┐рдпрд╛:

scope.$watch('myAsyncCollection', () => {
  ngModel.$viewValue = ngModel.$formatters.reduceRight((prev, fn) => fn(prev)), ngModel.$modelValue)
  ngModel.$render()
})

рдмрд╕ рдЕрдЧрд░ рдХреЛрдИ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдЦреЛрдЬ рд░рд╣рд╛ рд╣реИ - рдпрд╣ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЧрдпрд╛ рд╣реИ:
https://github.com/angular/angular.js/blob/master/src/ng/directive/ngModel.js#L822

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

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

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

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

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

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

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