2015-06-10 311 views
1

В этом регуляторе 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 непосредственно, и изменения вида соответственно. Все еще никаких результатов.

+0

Не могли бы вы показать нам свой вид кода? – Guinn

+0

Я добавил выдержки из него. Фактическое представление немного сложнее, это модальное окно, поэтому контроллер и вид вызывается из родительского представления. – foucdeg

ответ

1
$scope.currentHouse = data.houseDetail 

Вы не можете получить обновленное значение currentHouse потому, что его модель.
Таким образом изменить код выше

т.е.
$scope.currentHouse.house = data.houseDetail 
+0

Попытка этого прямо сейчас, это не работает сразу, но это дает мне забавные результаты. Благодарю. – foucdeg

+0

Все тот же результат, к сожалению. Я уточню свой вопрос, чтобы упомянуть, что я попробовал это. – foucdeg

Смежные вопросы