2016-01-11 1 views
4

Использование Angular 1.2.29 при построении <select> с ng-options появляется на поверхности, чтобы работать как ожидалось, когда я выбираю опцию, когда модель обновляется, и визуально <select> указывает, что выбран выбранный вариант.Почему Angular не обновляет DOM, добавляя атрибут 'selected' к тегу <option> в ng-вариантах, когда он правильно обновляет модель?

Однако при использовании инструментов разработчика для просмотра разметки я вижу, что теги параметров не обновляются, в частности, атрибут selected не удаляется из ранее выбранного параметра и не добавляется к вновь выбранному параметру.

<div data-ng-controller="MainController as main"> 

    <pre> {{ main.test.item }} </pre> 

    <select 
    data-ng-model="main.test.item" 
    data-ng-options="item.label for item in main.test.items" 
    required="required"> 
    <option value="" label="What do you want?"></option> 
    </select> 

</div> 

Установив модель this.test.item в контроллере selected="selected" добавляется ко второму варианту (с меткой «B»), однако последующие изменения (сделанные с помощью выбора) не обновлять размеченного соответствующим образом.

angular 
    .module('myApp') 
    .controller('MainController', MainController); 

function MainController() { 

    this.test = {}; 

    this.test.items = [ 
    { label : 'A' }, 
    { label : 'B' }, 
    { label : 'C' } 
    ]; 

    // Pre-select the second item. 
    this.test.item = this.test.items[1]; 
} 

Замечательно, что модель поддерживается в актуальном состоянии, но почему наценка остается неизменной?

Что можно сделать, чтобы исправить это, чтобы он обновлялся в соответствии с моделью?

https://jsfiddle.net/paulhhowells/4hmwhbe8/

+0

Можете ли вы включить небольшой jsfiddle? – devqon

+1

Возможно, вас заинтересуют ответы на http://stackoverflow.com/questions/29837387/angularjs-select-dom-markup –

+0

@ AdamAxtmann приветствия, я трался через stackoverflow, но не видел этого – paulhhowells

ответ

2

К сожалению, не хватает репутации размещать комментарии, по-видимому.

@paulhhowells Я думаю, что ответ по-прежнему применяется. Чтобы уточнить, DOM имеет свойства и атрибуты. Свойства имеют фактические значения, которые вас волнуют, они будут обновляться при изменении выбора. То, что вы видите, когда вы видите selected = "selected" в разметке, является атрибутом . Атрибуты не обновляются при изменении выбора, они существуют в разметке для создания элемента, и, как правило, используются для инициализации СВОЙСТВА элемента

EDIT: Там лучшее объяснение в документации JQuery, посмотри в разделе «Атрибуты vs Свойства» here.

+0

- это ваш вопрос, что мне все равно, добавлен ли выбранный атрибут «selected =» «» или удален из надписи? Я обновил jsfiddle, чтобы проиллюстрировать, что Angular добавляет этот атрибут, и эта надбавка сама по себе не обновляет DOM таким образом. – paulhhowells

+0

@paulhhowells Да, сам атрибут ничего не делает, кроме как инициализировать свойство. –

1

Атрибут selected не должен обновляться.

Используется только для обозначения того, что option он должен быть первоначально выбран.

https://developer.mozilla.org/en/docs/Web/HTML/Element/option

Поэтому Угловая не обновляет DOM путем добавления «выбран» атрибут к <option> теге нг-вариантов, когда он правильно обновляет модель, так как она не должна.