This repository was archived by the owner on Apr 12, 2024. It is now read-only.
feat(select): add $optionChangeListeners to selectDirective controller #9285
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Adds
$optionChangeListeners
to the selectDirective controller, this is fully backward compatible and has no impact on performance whatsoever if the dev decides not to use it, and has no impact on existing code.The reasoning behind this feature is that
ng-options
expression is un$parseable from outside theoptionDirective
, and you can't have the current set resulting from theng-options
expressions without relying on a scope. This forces the dev to create a custom directive to watch for changes on afiltered
variable from the underlaying scope (likeng-options="item.text for item in (filtered = (items | filter:fn1 | filter:fn2))"
and it's not portable between directives, like$viewChangeListeners
inNgModelController
.This makes isolated select controllers easier to accomplish and scope agnostic, aka web components style.
This also encourages future proof directive code, since it won't depend on the DOM or manually crafted enforced scopes, nor needs to watch over collections (that increases $digest overhead).
Pseudo-code:
Closes #9222