AngularJS: mise à Jour ngModel la propriété lorsque vous sélectionnez les options de changement

Il est facile à utiliser Angulaire de la liaison de données pour forcer un JavaScript propriété de changer lorsqu'un utilisateur modifie l'élément sélectionné dans un menu. Cependant, je ne peux pas comprendre comment la force de données propriété liée à changer lorsque le modèle utilisé pour générer un menu change.

Ce violon illustre le comportement: http://jsfiddle.net/2pHGX/. Changer le modèle en cliquant sur changeOptions provoque l'sélectionnez options pour modifier correctement. Mais les données liées à la propriété ne change pas immédiatement, il ne change que lorsque l'utilisateur sélectionne une autre option de menu.

<body ng-app ng-controller="bodyCtrl">
    <select ng-model="selection" ng-options="option for option in options">
    </select>
    <button ng-click="changeOptions()">changeOptions</button>
    <br>
    selection: {{selection}}
</body>

function bodyCtrl($scope) {
    $scope.options = [10, 20, 30];
    $scope.changeOptions = function() {
        $scope.options = [11, 22, 33];
    };
}

Je veux que les données de propriété liée à la mise à jour lorsque l'option sélectionnée change pour une raison, soit parce que l'utilisateur a choisi une option différente ou parce que le modèle, et donc les options, changé. Je peux faire ce travail avec $watch, mais je ne comprends pas pourquoi la liaison de données ne suffit pas. Quel est le meilleur moyen pour accomplir cette Angulaire? Suis-je un malentendu quelque chose de fondamental sur la liaison de données?

vous voulez garder le même indice?
Mes attentes naïves, c'est que, lorsque les options pour une données sélectionnez modifier, le pré-changer la valeur va continuer à être sélectionnée si elle s'affiche partout dans les nouvelles options indépendamment de l'index, et un vide option sera sélectionnée autrement
Je crois que je vois ce que tu veux dire. Vous vous attendez à {{selection}} de changer de <emptystring> lorsque le changeOptions() est déclenché. Je pense que je m'attends à la même chose. Intéressant...
La définition de la ng-model crée une étendue variable appelée "sélection". Lorsque vous modifiez le ng-options, vous n'avez pas déclencher le changement qui permettrait de mettre à jour la "sélection". C'est un distinctes et sans rapport avec la variable à ce point. J'aime davin réponse ci-dessous, parce qu'il traite de façon appropriée DOM événements et les données comme des entités indépendantes.

OriginalL'auteur Chris | 2013-07-08