4
我尝试从指令更新模型,并在$ apply或$ digest已在进行时遇到一些麻烦。我有一些问题:
- 为什么
scope[attrs.ngModel]
是存在的,但ngModel.$modelValue
不 存在于$应用阶段? - 为什么在$摘要阶段不能总是更新视图(特别是在困难的情况下)?
- 是$摘要阶段本地$摘要()或$根。$ 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
如何创建并提供自定义模型适配器?或者建议请合适的文章。 如果角度假定所有更改都已完成,我如何在$摘要阶段更改模型?现在我使用范围。$$阶段||范围。$ apply,但这是一种糟糕的方式,我认为... – tamtakoe
我确定你的代码示例和问题不能反映你真正的问题。你在代码中做什么......几乎是错误的,无论如何你想要做什么,我很抱歉地说,真的:-)如果你想保持你的代码“按原样”,你唯一的选择是检查当前阶段,如果它不是“$ apply”:将你的值设置器包含在作用域中$ apply(function(){scope [attrs.ngModel] .value =“你想要的任何内容”;})重新开始应用一个新值。但正如我所说 - 你应该重新思考你的示例代码,以显示你*真正想要的*。 – lgersman