javascript – 从AngularJS中的$apply或$digest循环中更新指令模型

我尝试从指令更新模型,并且当$apply或$digest正在进行时遇到一些麻烦.我有一些问题:

>为什么范围[attrs.ngModel]存在,但ngModel.$modelValue不存在
存在于$apply阶段?
>为什么在$digest阶段(特别是在困难情况下)不能始终更新视图?
> $digest阶段本地$digest()或$root.$digest()(来自$apply())在我的示例中?

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);
  });
}

现场演示:http://plnkr.co/edit/gVY6GJejEKCLdTIXNAzK?p=preview

最佳答案 >多数民众赞成因为角度不知道如何将模型映射到您的DIV元素. angular有几乎所有INPUT(除了INPUT类型文件),SELECT和TEXTAREA元素的内置模型实现.

在您的情况下(具有应用的ng模型的DIV),没有已知角度的匹配模型适配器. DIV元素的属性/属性应采用角度与模型同步?这就是为什么你没有应用$modelValue.

您需要做的是为角度提供自定义模型适配器,或者您需要使用INPUT,SELECT或TEXTAREA元素.

>因为在$digest阶段,angular假设所有更改都已完成.

>没有本地或全球$digest阶段.阶段始终与您的ng-app相关联.

点赞