如何使角度子范围刷新?

时间:2015-10-27 15:52:44

标签: javascript angularjs

我有一个模板:

<div class="oss-object cp-def cp-row" ng-repeat="(key, value) in data" ng-init="viewables = getViewables(value.versions[0].objectInfo);">
        <div class="cp-def">
            {{value.info.name}} OssStatus: {{value.versions[0].objectInfo.status}}
            , 3D-Viewables:
                <select ng-change="viewableSelected(value.versions[0].urn, viewables, '3d')" ng-model="viewables.selected3d" ng-options="viewable as viewable.name for viewable in viewables['3d']">
                    <option value="">---Please select---</option>
                </select>
            , 2D-Viewables:
                <select ng-change="viewableSelected(value.versions[0].urn, viewables, '2d')" ng-model="viewables.selected2d" ng-options="viewable as viewable.name for viewable in viewables['2d']">
                    <option value="">---Please select---</option>
                </select>
        </div>
    </div>

当使用新数据集更新我的 controller 中的数据(顶部ng-repeat中使用的数据属性)时,它不会自动刷新{中的子范围{1}}。它们来自数据集。有谁知道如何刷新孩子ng-options?我尝试过调用scopes$apply,但没有成功。

2 个答案:

答案 0 :(得分:1)

如果您查看ngInit的{​​{3}},您会发现他们基本上会说“除了嵌套ngRepeats之外,绝不会使用此内容”。 执行所需操作的一种方法是为每个重复项创建一个控制器,并在更改的数据(或本例中的表达式)上创建$watch,并将viewables设置为等于该值。 / p>

例如

function ViewablesCtrl($scope){
   $scope.$watch($scope.getViewables, function(){$scope.viewables = $scope.getViewables($scope.value.versions[0].objectInfo);}
})

-

<div class="oss-object cp-def cp-row" ng-repeat="(key, value) in data" ng-controller="ViewablesCtrl()">

答案 1 :(得分:1)

正如我在评论中所说,你可以尝试用viewables['3d']替换ng-options中的getViewables(value, '3d')并让控制器返回数组。