【问题标题】:Angularjs How to Toggle div's in ng-repeat?Angularjs如何在ng-repeat中切换div?
【发布时间】:2016-10-12 17:35:21
【问题描述】:

我在 angularjs 中工作,我需要在 ng-repeat 中切换 div,但它不能正常工作。 jQuery click 也不能解决这个问题。单击pregroupMem() 锚标记时,我正在调用此函数。和来自这个函数的数据 id,我在listdiv div 中使用它作为membersList。我需要在单击“custom-cn”锚标记时切换此 div。有多个列表,在每个列表中都有多个 listdivs 。我需要在单击列表的锚标记时切换特定的 div。

This is my js to get all groups of members. 

 localStorageService.set('grpOpen', grps.openGroups);
 localStorageService.bind($scope, 'grpOpen');

    grs.init = init;
    function init()
    {
        getMyData();    
    }   
    $scope.data = null;

    DataService.getMyData().then(function successCallback(response) 
    {
        $scope.data = response.data.results;
        $scope.grpOpen.length = 0;
        $scope.grpOpen.push({'data': response.data.results});
    },function errorCallback(response) {

    }); 

这是获取一个组的所有成员列表的js。我已经根据你的更新了这个

$scope.open = -1;
$scope.pregroupMem  = function(index,id,e){ 

        $rootScope.membersList = '';
        // $rootScope.membersList.length = 0;
        $scope.loading= true;

        DataService.getGrpMem(id).success(function (data) {
            $rootScope.membersList = data.results;
            $scope.data[index].shown = !$scope.data[index].shown;

            if( $scope.open >= 0 && $scope.data[$scope.open] ){
                $scope.data[$scope.open].shown = !$scope.data[$scope.open].shown;
            }
            if( $scope.open !== index ){
                $scope.data[index].shown = !$scope.data[index].shown;
            } 
            $scope.open = index;


        }).catch(function (err) {
              // Log error somehow.
        })
        .finally(function () {
          // Hide loading spinner whether our call succeeded or failed.
          $scope.loading = false;
        });

    }

<ul>
<li ng-repeat="groupsw in grpOpen[0].data track by $index"> 
  <a ng-click="pregroupMem($index,groupsw.grpId,$event)" class="custom-cn" href="javascript:;">{{ groupsw.grpName }}</a>

    <div class="listdiv"> 
        <ul class="userlist">
            <li ng-repeat="mymembers in membersList">
            <a class="add_user" href="javascript:;"><i class="fa fa-user-plus"></i></a>
            <div class="userlist">
            <span class="usnermalissval" ng-if="mymembers.Name != null">{{mymembers.Name}}</span>

            </div>
            </li>
        </ul>
    </div>

</li>  
</ul>

【问题讨论】:

  • 你能包含它的javascript代码吗?
  • 不清楚您要在此处切换什么。你能清楚地描述你试图显示/隐藏哪些 HTML 元素吗?
  • 有锚标签,其类为“custom-cn”。单击此锚标记时,我需要在锚标记之后显示具有类“listdiv”的隐藏 div。在此 js 函数中,我想添加切换脚本。
  • 您在此处的评论并没有真正阐明您要完成的工作。你的锚标签正在调用一个加载数据的角度函数,它根本没有切换任何东西。您应该开始研究ng-show/ng-hide,然后创建另一个属性来设置true/false 以供其中一个使用。
  • 我已经添加了javascript。

标签: javascript angularjs toggle ng-repeat


【解决方案1】:

您可以通过以下方式进行:

angular
  .module('app', [])
  .controller('MyController', function($scope) {
    $scope.data = [
      {grpId: 1, grpName: 'One'},
      {grpId: 2, grpName: 'Two'},
      {grpId: 3, grpName: 'Three'},
      {grpId: 4, grpName: 'Four'},
      {grpId: 5, grpName: 'Five'}
    ]
    $scope.open = -1;
    $scope.pregroupMem = function(index, id, e) {
      e.preventDefault();
      if( $scope.open >= 0 && $scope.data[$scope.open] ){
        $scope.data[$scope.open].shown = !$scope.data[$scope.open].shown;
      }
      if( $scope.open !== index ){
        $scope.data[index].shown = !$scope.data[index].shown;
      }
      $scope.open = index;
    }
  })
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
  <ul ng-controller="MyController">
    <li ng-repeat="groupsw in data">
      <a ng-click="pregroupMem($index, groupsw.grpId, $event)" class="custom-cn" href="javascript:;">{{ groupsw.grpName }}</a>

      <div class="listdiv" ng-show="groupsw.shown">
        <ul class="userlist">
          This is a child div of grpId: {{groupsw.grpId}}
        </ul>
      </div>

    </li>
  </ul>
</div>

【讨论】:

  • 我的数据是根据组 ID 动态发送的。
  • 在我的示例之间添加 Ajax 代码。我已删除您的代码,以便该示例可以工作。
  • 我已根据您的更改更改了代码,但显示 $scope.data not found 错误。
  • 我已经添加了这个但是得到了同样的错误。 $scope.data 未定义
  • 那么在获取所有成员组的 hs 代码中可能存在错误
猜你喜欢
  • 2016-05-31
  • 2017-12-31
  • 1970-01-01
  • 2017-12-22
  • 1970-01-01
  • 2013-10-09
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多