I am trying to understand how to create custom valueAccessor
implementations to bind [ngModel] to an existing Widget directive in order
to give it two-way data binding. So, imagine that I have:
Widget
inputs: [ "value" ] ---> Sets the selected value of the widget.
outputs: [ "select" ] ---> Emits event when value *should be selected* (ie,
doesn't change it internally).
Ok, now I'm trying to create a valueAccessor that selects on
"widget[ngModel]"... such that
<widget [(ngModel)]="someValue" />
... will match TWO directives - the "Widget component" (which knows nothing
about ngModel) and the "accessor directive."
So far so good. Until I implement the *writeValue()* method:
function writeValue( newValue ) {
widget.value = newValue;
}
Here, Angular is throwing the error:
Expression 'value in AppController@4:8' has changed after it was checked.
Previous value: 'false'. Current value: 'true' in [value in
AppController@4:8]
If I wrap the "widget.value = newValue;" in a setTimeout(), the error goes
away. But, I don't believe this is a *fix*. I think I am just missing
something fundamental about change detection. Or valueAccessors.
It almost as if the fact that both directives match on the same Node, one
directive cannot alter the other's inputs. But, as they are different
directives,
Thanks!
--
You received this message because you are subscribed to the Google Groups
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.