В angularjs, как вы получаете `select` для обновления, когда изменяется массив для ng-options?

имеют select на основе любого массива. элементы в массиве могут измениться. как мне получить контроллер angular для обновления массива?

module.js

var langMod = angular.module('langMod', []);
langMod.controller( .controller( 'colorCntl', function($scope) {
  $scope.color = 'wt';
  $scope.colorArr = [
    { id: 'br', name: 'brown' },
    { id: 'wt', name: 'white' }
  ];
});

index.html

<form ng-controller='wordCntl' >
  <select ng-model="color" ng-options="c.id as c.name for c in colorArr">
     <option value=''>-- chose color --</option>
  &lt/select>
</form>

с консоли:

> scope = angular.element(document.querySelector('select')).scope();
> scope.colorArr.push( { id:'bk', name:'black' } );
  3
note! the select dropdown still only has brown and white, not black

как я могу обновить select, чтобы все элементы в colorArr были параметрами?

Ответы

Ответ 1

Angular использует наблюдатели и будет обновлять только пользовательский интерфейс, если цикл дайджеста был запущен.

Обычно вы добавляете в массив через какое-то событие в пользовательском интерфейсе или вызываете $http service, и те, кто заботится о них отпустив $digest() для вас.

Поскольку вы просто добавляете непосредственно к массиву, Angular не знает, что что-то изменилось и, следовательно, не обновляет пользовательский интерфейс.

Вместо этого закройте свой оператор внутри scope.$apply(function(){ //code });.