【问题标题】:expand/collapse the row information with dynamic data使用动态数据展开/折叠行信息
【发布时间】:2018-12-28 00:00:25
【问题描述】:

我正在开发 angularjs 应用程序。我想在单击表格行中的图像时展开/折叠表格行并显示更多动态信息。

请找到演示:http://next.plnkr.co/edit/LjVTnKjaLdnYojqV?preview

当点击行上的勾号时,我想显示该行的更多详细信息。目前在我上面的演示中,单击图像时它正在展开行或折叠,但问题是它没有在展开的行中显示动态数据信息(新显示的行)。

样本:

<table ng-table="tableParams" class="table table-condensed table-bordered table-striped">
    <tbody ng-repeat="row in $data">
    <tr ng-click="show()">
      <td>
            <a class="btn btn-link" ng-init="toggle[$index] = false" ng-click="toggle[$index] = !toggle[$index]">
              <span class="glyphicon glyphicon-ok" ng-if="!toggle[$index]"></span>
              <span class="glyphicon glyphicon-bed" ng-if="toggle[$index]"></span>
            </a>
          </td>

      <td data-title="'Name'">{{row.name}}</td>
      <td data-title="'Age'">{{row.age}}</td>
      <td data-title="'SID'">{{row.sid}}</td>
    </tr> 
    <tr ng-if="toggle[$index]">
      <div ng-table="tableParams2" ng-repeat="row in $data">
          <td> {{$index}}</td>
          <td> {{product}}</td>
           <td> {{month}} </td>
            <td> {{pid}}</td>
      </div>
    </tr>
    </tbody>
  </table> 

js代码:

app.controller('MainCtrl', function($scope, NgTableParams) {

$scope.show = function(){
  alert("show/hide");
  var data = [{product: "TV", month: 5,pid:"11"},
              {product: "mobile", age: 4,pid:"22"},
              {product: "desktop", age: 7,pid:"33"}];
   $scope.tableParams2 = new NgTableParams({}, { dataset: data});
}

var data = [{name: "Moroni", age: 50,sid:"12PAX"},
              {name: "Tiancum", age: 43,sid:"12PAX"},
              {name: "Jacob", age: 27,sid:"12PAX"},
              {name: "Nephi", age: 29,sid:"12PAX"},
              {name: "Enos", age: 34,sid:"12PAX"},
              {name: "Tiancum", age: 43,sid:"12PAX"},
              {name: "Jacob", age: 27,sid:"12PAX"},
              {name: "Nephi", age: 29,sid:"12PAX"},
              {name: "Enos", age: 34,sid:"12PAX"},
              {name: "Tiancum", age: 43,sid:"12PAX"},
              {name: "Jacob", age: 27,sid:"12PAX"},
              {name: "Nephi", age: 29,sid:"12PAX"},
              {name: "Enos", age: 34,sid:"12PAX"},
              {name: "Tiancum", age: 43,sid:"12PAX"},
              {name: "Jacob", age: 27,sid:"12PAX"},
              {name: "Nephi", age: 29,sid:"12PAX"},
              {name: "Enos", age: 34,sid:"12PAX"}];

$scope.tableParams = new NgTableParams({}, { dataset: data});  
});

【问题讨论】:

    标签: html angularjs twitter-bootstrap ngtable


    【解决方案1】:

    我更改为以下内容,无法确定,但似乎 ng-table 在 td 元素周围的 div 存在问题,并且可能在嵌套和再次引用 $data 时遇到问题?也许有人可以用更多的知识发表评论。

    .js

    $scope.show = function(){
      alert("show/hide");
      $scope.tableParams2 = [{product: "TV", month: 5,pid:"11"},
                  {product: "mobile", age: 4,pid:"22"},
                  {product: "desktop", age: 7,pid:"33"}];
    }
    

    .html

    <tr ng-if="toggle[$parent.$index]"ng-repeat="row in tableParams2">
          <td> {{$index}}</td>
          <td> {{row.product}}</td>
           <td> {{row.month}} </td>
            <td> {{row.pid}}</td>
    </tr>
    

    My updated Plunker

    【讨论】:

    • 如何显示 tableParams2 中存在的所有数据(单击每行图像时为 3 行)。目前它仅根据索引显示一行..@Gabriel Gates
    • 对不起,@nan 没有注意到那个,我更新了答案,以便 ng-if 使用父级的 $index 代替。
    • 感谢您的更新。根据某些条件检查(动态数据)检索数据时仍然存在一些问题。单击第一行图像时,单击第二行图像时再次正确显示数据,第二行显示的动态数据也显示在第一行,类似地,当单击其他行时,当前数据显示在所有先前展开的行中。演示:next.plnkr.co/edit/kR9bDDbuVkby2ely?preview
    • 查看我更新的 plunker next.plnkr.co/edit/nJK3RJPqOMF4qF7O?preview 你的问题是因为 $scope.tableParams2 每次都被分配一个新值,因为这是其他人引用的,所以它们都会更新。您应该阅读docs.angularjs.org/tutorial/step_00 之类的教程,以便更好地了解 AngularJS 基础知识。
    • 感谢输入和链接,问题是我不能给出静态条件 if(input =='1'){ ..} if(input =='2'){..}因为当我单击行中的图像时,我得到的数据是动态数据,当用户单击第一行中的图像时,它会动态地从后端获取数据,并在单击它获取的图像时类似地显示其他行来自后端和显示的数据..有什么合适的方法吗?我的一个想法是当用户单击新行以查看信息时隐藏上一个展开的行..有可能吗?还是有更好的方法?
    猜你喜欢
    • 2020-02-22
    • 2014-03-26
    • 2015-07-03
    • 2016-03-30
    • 2020-11-21
    • 2013-05-31
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    相关资源
    最近更新 更多