В этом регуляторе AngularJS для предварительно заполненной формы получение данных инициируется событием с использованием $ broadcast и $ on. Однако при обновлении данных в представлении обновляются только некоторые из соответствующих полей.
$scope.currentHouse = {};
$scope.$on('houseInfoLoad', function(event, data) {
$scope.currentHouse = data.houseDetail; //does not refresh the view
console.log($scope.currentHouse); //output is correct
//the next three calls refresh the corresponding fields in the view
$scope.changeGarageRadioValue($scope.currentHouse.hasGarage);
utils.setSelection($scope.houseKeywords, $scope.currentHouse.keyword.id);
utils.setSelection($scope.houseTypes, $scope.currentHouse.type.id);
});
changeGarageRadioValue()
по существу делает то, что он говорит, и utils.setSelection(list, id)
добавляет selected = true
свойство к элементу списка, который имеет идентификатор. Это приводит к установке значения поля выбора (с использованием isteven's multi-select plugin).
В представлении есть несколько полей текста, привязанных к свойствам $scope.currentHouse
, а также эти переключатели и выберите поля.
В результате текстовые поля иногда не обновляется, однако выбрать и радиокнопок сделать.
Вот что я безуспешно:
- Обертывание все в
$timeout()
; - Вызов
$scope.$apply()
после установки$scope.currentHouse
(выдает ошибку о том, что мы уже внутри$apply()
) - Изменение начального определения $ scope.currentHouse от
{}
до объекта с каждым из полей установлен в нуль.
Может ли кто-нибудь увидеть, чего у меня нет, или как заставить триггер обновить?
РЕДАКТИРОВАТЬ: выдержки из обзора:
текстовое поле:
<label>ADDITIONAL DESCRIPTION</label>
<div>
<input type="text" ng-model="currentHouse.additionalDescription" class="input-mandatory" value=""/>
</div>
множественного выбора:
<label>TYPE</label>
<div>
<div directive-id="houseType" multi-select input-model="houseTypes" output-model="currentHouse.type" button-label="text" item-label="text" selection-mode="single" default-label="Select" tick-property="selected" ></div>
</div>
Рентгено кнопки:
<div><label>HAS GARAGE</label></div>
<div>
<div id="radiobuttonNo" ng-click="changeGarageRadioValue(false);">
NO
</div>
<div id="radiobuttonYes" ng-click="changeGarageRadioValue(true);" class="active">
YES
</div>
</div>
EDIT # 2 согласно предложению ALOK Сингха:
Я попытался положить data.houseDetail
в $scope.currentHouse.house
вместо $scope.currentHouse
непосредственно, и изменения вида соответственно. Все еще никаких результатов.
Не могли бы вы показать нам свой вид кода? – Guinn
Я добавил выдержки из него. Фактическое представление немного сложнее, это модальное окно, поэтому контроллер и вид вызывается из родительского представления. – foucdeg