我尝试从指令更新模型,并且当$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相关联.