javascript - Angularjs 中的嵌套 Accordion 在子级中具有相同的 Scope 变量

标签 javascript html angularjs angularjs-scope angularjs-ng-repeat

我正在使用 v-accordion ,用 angularjs 编写的嵌套 Accordion ,用于显示一些数据。这是我的 HTML 标记:

<v-accordion class="vAccordion--default" id="subCommodityAccordion" 
             onexpand="expandSubCallback(index, id)">
    <v-pane ng-repeat="sub in subcoms.subComms" id="{{ ::sub.sId }}">
        <v-pane-header style="margin-bottom:0;">
            {{sub.sName}}
        </v-pane-header>
        <v-pane-content>
            <div ng-repeat="item in CityData" class="panel panel-default">
                <div class="panel-heading">
                    <h4 class="panel-title"> {{item.cName}}</h4>
                </div>
                <div class="panel-body pbody">
                    <v-accordion class="vAccordion--default" id="my-accordion"
                                 onexpand="expandCallback(index, id)">
                        <v-pane ng-repeat="data in item.prices" id="{{ ::data.id }}">
                            <v-pane-header style="margin-bottom:0;">
                                <div class="clearfix">
                                    <!-- some data binding -->
                                </div>
                            </v-pane-header>
                            <v-pane-content>
                                    <!-- some data binding -->
                                <div id="container{{data.id}}">
                                </div>
                            </v-pane-content>
                        </v-pane>
                    </v-accordion>
                </div>
            </div>
        </v-pane-content>
    </v-pane>
</v-accordion>

在 Controller 中:

$http({
  method: "GET",
  url: "/api/Commodity/getSubCommoditiesOnMId",
  params: {  mId: parseInt(mainCommId)  }
}).then(function mySucces(response) {
  $scope.subcoms = response.data;
}, function myError(response) { });

$scope.CityData = null;
$scope.expandSubCallback = function (index, id) {
  $scope.CityData = null;
  $http({
      method: "GET",
      url: "/api/Commodity/GetCitiesOnSubcommodityId",
      params: {  SubCommId: parseInt(id) }
  }).then(function mySucces(response) {
      $scope.CityData = response.data;
  }, function myError(response) { });
};

$scope.expandCallback = function (index, id) {
  $http({
      method: "GET",
      url: "/api/Commodity/GetGraphDataProductId",
      params: {  PId: parseInt(id)  }
  }).then(function mySucces(response) {
      var data = response.data;
      // some highcharts related code which is working fine without top level accordion.
  }, function myError(response) { });
};

现在的问题是,当$scope.expandSubCallback被称为$scope.CityData 未扩展 主要(顶部) Accordion 内容也正在填充。如何,我们可以轻松避免这种情况?因此,由于图表容器的 ID 重复,Highchart 无法正常工作 <div id="container{{data.id}}"></div>

我试过使用 ng-repeat="item in CityData[sub.sId]"然后在 Controller 中 $scope.CityData[id] = response.data;这是行不通的。有没有像传递索引等最简单的方法来这样做?我是 angularjs 的新手并且自学了它。

回答了我自己的问题。但是,如果除此之外还有其他解决方案,请告诉我。

最佳答案

我想出了解决这个问题的方法。我用了ng-if检查 id 的指令。在 HTML 中,我将其用作

<div ng-repeat="item in CityData"  ng-if="expandedSubId == sub.sId"  class="panel panel-default">

$scope.expandSubCallback 函数中,我将该 id 分配给该范围变量,如下所示:

then(function mySucces(response) {
  $scope.expandedSubId = id;
  $scope.CityData = response.data;
}

这样,如果条件匹配,数据将重复。回答,因为它可能对某人有帮助。

关于javascript - Angularjs 中的嵌套 Accordion 在子级中具有相同的 Scope 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40204344/

相关文章:

不需要 node.js 的 javascript 包管理器

css - 如何在父 div 和它的子 div 之间放置一个 div?

javascript - 使用 jquery 在选择框中选择最接近的值

javascript - 如何创建减号和加号按钮来更新字段?

javascript - angularJs检查是否输入了输入

javascript - Math.max() 用于变量

javascript - jQuery 自动完成不会调用 ASP.NET 中的文本框

JavaScript 正则表达式问题 - 匹配然后拆分

javascript - 将 $scope 替换为 "' controller' as"syntax

javascript - 使用请求 promise 获取本地 json 文件