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.

Reply via email to