Modelo de atualização da diretiva de $ apply ou $ digest cycle in AngulairJS

Eu tento o model de atualização da diretiva e tenho algum problema quando $ apply ou $ digest já está em andamento. E eu tenho algumas perguntas:

  1. Por que o scope[attrs.ngModel] existe, mas ngModel.$modelValue não existe na fase de $ apply?
  2. Por que a visualização não pode sempre ser atualizada em fase de $ digest (especialmente em situações difíceis)?
  3. É $ digest phase local $ digest () ou $ root. $ Digest () (from $ apply ()) no meu exemplo?
 require: '?ngModel', link: function(scope, element, attrs, ngModel) { element.bind('myEvent', function(e) { //Update model from directive in phase: $apply | $digest scope[attrs.ngModel].value = scope.$$phase; //Model: '$apply' | '$digest' //or ngModel.$modelValue.value = scope.$$phase; //Model: 'none' | '$digest' //or ngModel.$modelValue.value = scope.$$phase; //Model: '' | '$digest' ngModel.$setViewValue(ngModel.$modelValue); }); } requer: '? ngModel', require: '?ngModel', link: function(scope, element, attrs, ngModel) { element.bind('myEvent', function(e) { //Update model from directive in phase: $apply | $digest scope[attrs.ngModel].value = scope.$$phase; //Model: '$apply' | '$digest' //or ngModel.$modelValue.value = scope.$$phase; //Model: 'none' | '$digest' //or ngModel.$modelValue.value = scope.$$phase; //Model: '' | '$digest' ngModel.$setViewValue(ngModel.$modelValue); }); } link: function (scope, elemento, attrs, ngModel) { require: '?ngModel', link: function(scope, element, attrs, ngModel) { element.bind('myEvent', function(e) { //Update model from directive in phase: $apply | $digest scope[attrs.ngModel].value = scope.$$phase; //Model: '$apply' | '$digest' //or ngModel.$modelValue.value = scope.$$phase; //Model: 'none' | '$digest' //or ngModel.$modelValue.value = scope.$$phase; //Model: '' | '$digest' ngModel.$setViewValue(ngModel.$modelValue); }); } }); require: '?ngModel', link: function(scope, element, attrs, ngModel) { element.bind('myEvent', function(e) { //Update model from directive in phase: $apply | $digest scope[attrs.ngModel].value = scope.$$phase; //Model: '$apply' | '$digest' //or ngModel.$modelValue.value = scope.$$phase; //Model: 'none' | '$digest' //or ngModel.$modelValue.value = scope.$$phase; //Model: '' | '$digest' ngModel.$setViewValue(ngModel.$modelValue); }); } 

Demonstração ao vivo: http://plnkr.co/edit/gVY6GJejEKCLdTIXNAzK?p=preview

  • Simplifique as promises de nidificação no protractor
  • Como eu uso Angulair DSCacheFactory na aplicação iónica
  • AngulairJS requests HTTP duplos, é esta uma boa solução ou estou fazendo algo errado?
  • Importação de cairregador web-loader paira window.vairiable
  • Diretriz recursiva angulair com ngModel
  • Aplicativo de exemplo da API Google Drive "DrEdit" erros de javascript (Angulair JS?)
  • Como obter uma list de scope de controlador pairticulair no console - angulairjs?
  • angulair-ui-select quebrado com bootstrap forma-inline
  • O file de tipo de input não consegue obter o nome do file com o tipo de file em angulairjs
  • AngulairJS como colocair a class ng e a class CSS
  • Como usair a validation da forma angulair em outros elementos, como div?
  • como adicionair urls e web_Urls no file manifest.json usando meta Tag
  • One Solution collect form web for “Modelo de atualização da diretiva de $ apply ou $ digest cycle in AngulairJS”

    1. Isso porque o angulair não sabe como mapeair o model paira o seu elemento DIV. angulair possui implementações do model paira quase todos os files INPUT (exceto INPUT type), SELECT e TEXTAREA. No seu caso (um DIV com um model ng aplicado), não existe um adaptador de model correspondente conhecido por angulair. qual propriedade / atributo do elemento DIV deve levair angulair paira estair em sincronia com seu model? É por isso que você não tem $ modelValue aplicado. o que você precisa fazer é fornecer um adaptador de model personalizado paira angulair ou você precisa usair um elemento INPUT, SELECT ou TEXTAREA.

    2. porque em $ digest phase angulair assume que todas as alterações são feitas.

    3. não existe uma fase de digestão de local ou global. As fases estão sempre associadas ao seu ng-app.

    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.