Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

ng-model in select-2 takes value from contents of the option, instead of ng-value, when the contents contain more than one Angular expression #15413

Closed
@Simberific

Description

@Simberific

Note: for support questions, please use one of these channels: https://github.com/angular/angular.js/blob/master/CONTRIBUTING.md#question. This repository's issues are reserved for feature requests and bug reports.

Do you want to request a feature or report a bug?
Bug

What is the current behavior?
Using ng-model in a select-2 takes the value from the contents of the option (the displayed text in the dropdown), instead of the ng-value, when the contents contain more than one Angular expression. When it's just one Angular expression this does not happen, as expected.

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem via https://plnkr.co or similar (template: http://plnkr.co/edit/tpl:yBpEi4).

Here is my example:

                 <select ui-select2="{dropdownAutoWidth: true}"
                              ng-change="copyFromTaskDefinition(formBuilder.taskDefinitionNameToCopy)"
                              ng-model="formBuilder.taskDefinitionNameToCopy">
                        <option value=""></option>
                        <option
                            ng-repeat="otherTask in otherTaskDefinitions | orderBy:'taskDefinitionName'"
                            ng-value="otherTask.taskDefinitionName">
                            {{ otherTask.taskDefinitionName }}
                            {{ otherTask.isDraft && '(draft)' || '' }}
                        </option>
                      </select>

What is the expected behavior?
The expected behavior is that ng-model is populated with "otherTask.taskDefinitionName" from ng-value. But instead, it is populated with

{{ otherTask.taskDefinitionName }}
                            {{ otherTask.isDraft && '(draft)' || '' }}

whitespace and all.

What is the motivation / use case for changing the behavior?
This leads to bugs in consumer code because the ng-model is expected to be populated with the ng-value instead of the displayed text

Which versions of Angular, and which browser / OS are affected by this issue? Did this work in previous versions of Angular? Please also test with the latest stable and snapshot (https://code.angularjs.org/snapshot/) versions.

Other information (e.g. stacktraces, related issues, suggestions how to fix)

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions