angular.js icon indicating copy to clipboard operation
angular.js copied to clipboard

ngModelController: trigger change when only property of model changes

Open petebacondarwin opened this issue 11 years ago • 2 comments

Description If you have an input box that is associated with a model that is an array (or an object), the update machinery ($formatter pipeline and so on) is not triggered if only a property on the array or object changes. This is because ngModelController watches the model without checking objectEquality.

The multiple select input has a kind of hack that triggers a call to $render if the model updates a property but this fails to call the $formatter pipeline. If we push a new option into the array then the select renders OK but a required validator would fail to update.

Reproduction See this http://plnkr.co/edit/yNFihkAgrVhHYx7lOtMc?p=preview.

Suggested Fix Asking the NgModelController to watch with object equality would probably be the simplest solution. There may be a performance impact, though since most models are not objects or arrays then this should short-circuit quite quickly for those values.

Angular Version: 1.2.5+

OS: all

Related to : #5337

petebacondarwin avatar Dec 17 '13 13:12 petebacondarwin

it seems like this issue is still open. I would like to have a go at fixing it. Is there any new information or planning available for this issue?

I thought, it might be possible to make the deep-watching configurable through the ngModelOptions (default = false i.e. no deep watching).

antonkarsten avatar Apr 01 '15 20:04 antonkarsten

It be cool if the option allowed for either deep equality or for it to use a watchCollection under the hood, this keeps it flexible.

@Narretz @antonkarsten any update on putting this into the next 1.5.x release?

InsomniacFury avatar Jun 04 '16 02:06 InsomniacFury