В 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>
</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 });
.