在这个用于预填充表单的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
属性添加到具有id的列表元素中。这具有设置选择字段的值的效果(使用isteven的multi-select plugin)。
该视图包含一些绑定到$scope.currentHouse
属性的文本字段,以及这些单选按钮和选择字段。
结果是文本字段有时不会更新,但是选择和单选按钮执行。
这是我尝试失败的原因:
$timeout()
; $scope.$apply()
后调用$scope.currentHouse
(抛出错误,说明我们已经在$apply()
内){}
更改为一个对象,并将每个字段设置为null。任何人都可以看到我缺少的东西,或者如何强制触发刷新?
编辑:使用视图中的摘录:
文字字段:
<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>
根据Alok Singh的建议编辑#2 :
我尝试将data.houseDetail
直接放入$scope.currentHouse.house
而不是$scope.currentHouse
,并相应地更改视图。仍然没有结果。
答案 0 :(得分:1)
$scope.currentHouse = data.houseDetail
您无法获得currentHouse
的更新值,因为它是一个模型
所以改变上面的代码,即
$scope.currentHouse.house = data.houseDetail