在$ scope之后仅查看部分刷新。$ on()

时间:2015-06-10 08:20:37

标签: javascript angularjs

在这个用于预填充表单的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()内)
  • 将$ scope.currentHouse的初始定义从{}更改为一个对象,并将每个字段设置为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,并相应地更改视图。仍然没有结果。

1 个答案:

答案 0 :(得分:1)

$scope.currentHouse = data.houseDetail

您无法获得currentHouse的更新值,因为它是一个模型 所以改变上面的代码,即

$scope.currentHouse.house = data.houseDetail