Question: Using Angular 1.2.29 when I build a `<select>` with `ng-options` it appears on the surface to work as expected, when I select an option the model is updated, and visually the `<select>` indicates that the newly selected option has been chosen.

However, when using Developer Tools to view the mark-up I can see that the option tags are not updated, specifically the `selected` attribute is not removed from the previously selected option, nor is it added to the newly selected option.

```
<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>

```

By setting the model `this.test.item` within the controller `selected="selected"` is added to the second option (with the label 'B'), however subsequent changes (made by using the select) do not update the mark-up accordingly.

```
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];
}

```

It’s great that the model is kept up to date, but why does the mark-up remain unchanged?

What can be done to fix this so that it is updated to match the model?

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

Answer: 
Sorry, don't have enough reputation to post comments, apparently. 

@paulhhowells I think the answer there still applies. To elaborate, the DOM has *properties* and *attributes*. *Properties* have the actual values that you care about, they'll update as you change the selection. What you're seeing when you see selected="selected" in the markup is the *attribute* selected. Attributes don't update as you change the selection, they exist in the markup to create the element, and are usually used to initialize the element's *properites*

EDIT: There's a better explanation in the jQuery documentation, take a look at the Attributes vs Properties section [here](http://api.jquery.com/prop/).
The `selected` attribute should not be expected to be updated.

It is only used to indicate that the `option` it is on should be *initially* selected.

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

Therefore, Angular does not update the DOM by adding a 'selected' attribute to an `<option>` tag within ng-options when it correctly updates the model, because it should not.