AngularJS: Как предотвратить щелчок ng для целевых дочерних элементов

0

У меня есть древовидная структура, содержащая папку как родительскую и файлы как дочерние, но одна и та же папка также может содержать другую папку в качестве дочернего элемента. В первый раз единственными видимыми элементами являются папки, которые можно щелкнуть, чтобы просмотреть их файлы.

Моя проблема в том, что когда я нажимаю на родительскую папку, дочерняя папка также расширяется, и я хочу видеть только файлы в папке с кликом.

Например (JSFIDDLE), когда я нажимаю на parent folder я не хочу, чтобы дочерняя child folder также расширялась, пока я не нажму на нее.

Это мой код (структура кода не должна изменяться):

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
<div ng-app>
  <div class="folder-group">
    <span class="folder-title" ng-click="openFolder=!openFolder">
      <i class="fa {{openFolder ? 'fa-chevron-down' : 'fa-chevron-right'}}"></i>
      <i class="fa fa-folder-o"></i>
      folder parent
    </span>
    <ul ng-show="openFolder">
      <li>file1</li>
      <li>file2</li>
      <li>file3</li>
      <li>file4</li>
      <li class="children-folder">
        <span class="folder-title" ng-click="openFolder=!openFolder">
          <i class="fa {{openFolder ? 'fa-chevron-down' : 'fa-chevron-right'}}"></i>
          <i class="fa fa-folder-o"></i>
          folder children
        </span>
        <ul ng-show="openFolder">
          <li>file1</li>
          <li>file2</li>
          <li>file3</li>
          <li>file4</li>
        </ul>
      </li>
    </ul>
  </div>
</div>

Это оригинальный шаблон:

<span class="folder-title" ng-click="get_menu_items(folder); openFolder =! openFolder;">
    <i class="fa {{openFolder ? 'fa-chevron-down' : 'fa-chevron-right'}}"></i>
    <i class="fa fa-folder-o"></i>
    {{ folder.name }}
</span>
<ul ng-show="openFolder">
    <li class="item" ng-repeat="file in folder.files">
        <label>
            <input class='file-list-item' type="checkbox" name="file_map[]" value="{{ file.id }}" ng-model="file_map[file.id]" ng-click="update_selection($event)" />
            <i class="fa fa-file-o"></i>
            <span>{{ file.name }}</span>
        </label>
    </li>
    <li menuitem ng-repeat="folder in folder.folders" ng-model="folder"></li>
</ul>


scope.get_menu_items = function(folder) {
    folders_service.get_sub_folders(folder, false, function(folders, files) {
    }, function(err, status) {
        scope.handle_top_level_errors(err, status);
    });
}

1 ответ

0

Просто переименуйте папку ng-click для детей

          <li class="children-folder">
            <span class="folder-title" ng-click="openFolder2=!openFolder2">
              <i class="fa {{openFolder2 ? 'fa-chevron-down' : 'fa-chevron-right'}}"></i>
              <i class="fa fa-folder-o"></i>
              folder children
            </span>
            <ul ng-show="openFolder2">
              <li>file1</li>
              <li>file2</li>
              <li>file3</li>
              <li>file4</li>
            </ul>
          </li>

EDIT 2:

В вашей функции папки,

Вам нужно добавить _{{$index+1}} вместе с именем openFolder вместе с циклом, чтобы имена отображались как openFolder_1, openFolder_2... Я не могу указать свою функцию с приведенными выше сведениями

Это следующее только для справочной цели.

<li ng-repeat="name in names">{{openFolder}}_{{$index+1}}</li>

приводит к

openFolder_1 openFolder_2

  • 0
    не может переименовать его, потому что эта папка имеет ту же структуру, что и родительская (генерируется с помощью ng-repeat )
  • 0
    Можно ли добавить {{$ index + 1}} с помощью итеративного цикла в функции ng-repeat (возможно, в контроллере), чтобы соглашение об именах было openFolder1, openFolder2 .. и так далее?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню