【问题标题】:How to make angular child scopes refresh?如何使角度子范围刷新?
【发布时间】:2015-10-28 05:43:36
【问题描述】:

我有一个模板:

<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>

当我的控制器中的数据被更新(顶部ng-repeat中使用的数据属性)时,它不会自动刷新ng-options中的子范围.来自数据集。有谁知道如何刷新孩子scopes?我试过打电话给$apply$digest,但没有成功。

【问题讨论】:

  • 在控制器中更新data时更新viewables怎么样?
  • viewables 是 ng-repeat 中子范围的属性,不是吗?在每个 ng-repeat 循环中创建一个新的可视化属性,并根据数据中值的子属性进行计算,我认为它在父控制器中实际上无法访问
  • 啊,是的。问题可能是ng-init 没有重新运行。您可以尝试将ng-options 中的viewables['3d'] 替换为getViewables(value, '3d'),并让控制器返回数组。应该正确更新。
  • 你能发布你的控制器代码吗?
  • @OmriAharon 我按照你在上一条评论中所说的做了,效果很好!,放弃答案,我会接受

标签: javascript angularjs


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果您查看docsngInit,您会看到他们基本上说“除了嵌套的ngRepeats 之外,永远不要使用它”。 一种方法是为每个重复项创建一个控制器,并在发生变化的数据(或本例中的表达式)上创建一个 $watch,并将 viewables 设置为等于该值。

    例如

    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()">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-14
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多