Функция onclick не работает независимо для каждого элемента ng-repeat

Я использовал ng-repeat, чтобы распечатать некоторые элементы div. В каждом div я поставил тег p с надписью «Посмотреть больше». При нажатии на это я хочу, чтобы конкретный div, который был нажат для просмотра, отображал данные, которые я поместил для отображения при этом щелчке. Но вместо этого все элементы div запускаются вместе при нажатии любого тега view more p. Кроме того, в контенте, который будет отображаться при нажатии, у меня есть тег p, который говорит, что меньше смотреть, и он скрывает этот контент, и это делает то же самое. Как заставить их работать независимо?

вот код html и angularjs

<div ng-repeat = "rent in RentSummDtl" class = "rentSummCard">
  <div ng-if = "rent.property_id == propId">
    <p id = "rentSummPropName">{{ rent.month_yr }}</p>
    <p class = "rentSummDetl">{{ rent.propertypayamount }}</p>
    <p class = "rentSummDetl">{{ rent.calculatedpropertypayamount }}</p>
    <p class = "rentSummDetl" ng-click = "isShowHide('show')" ng-show = "viewMore">View More <i class = "fas fa-chevron-down"></i></p>

  <div ng-show = "showrentDtl">
    <p class = "rentSummDetl">{{ rent.addition }}</p>
    <p class = "rentSummDetl">{{ rent.deduction }}</p>
    <p class = "rentSummDetl">{{ rent.percentage | number:2 }}</p>
    <p class = "rentSummDetl">{{ rent.ad_remark }}</p>
    <p class = "rentSummDetl">{{ rent.de_remark }}</p>
    <p ng-click = "isShowHide('hide')">View Less <i class = "fas fa-chevron-up"></i></p>
  </div>
  </div>
</div>
$scope.showrentDtl = false;
$scope.hiderentDtl = false;
$scope.viewMore = true;
$scope.isShowHide = function (param) {
  if (param == "show"){
    $scope.showrentDtl = true;
    $scope.hiderentDtl = false;
    $scope.viewMore = false;
  }
  else if (param == "hide"){
    $scope.showrentDtl = false;
    $scope.hiderentDtl = true;
    $scope.viewMore = true;
  }
  else{
    $scope.showrentDtl = false;
    $scope.hiderentDtl = false;
  }
}

Это потому, что я поместил ng-click внутри ng-repeat, и, следовательно, он работает для всех одновременно. Но тогда как бы я сохранил представление внутри каждого div, если я оставлю его вне ng-repeat.

Разве 'property_id' не уникален?

Bill P 11.07.2019 15:25

Для каждого имеющегося у вас div режим отображения «более или менее» зависит от $scope.viewMore, уникального для области видимости. Я бы сказал, что вам нужно иметь столько переменных viewMore, сколько у вас есть div. Например, $scope.viewMore{{rent.id}}

jdbs 11.07.2019 16:13
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
2
49
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку ng-repeat создает свою собственную локальную область, вы можете воспользоваться этим, определив переменную, которая является локальной для каждого элемента в вашем ng-repeat. Для этого просто удалите переменную viewMore из контроллера и установите ее значение непосредственно в представлении. Вот простой пример, иллюстрирующий эту технику.

angular.module('app', [])
  .controller('ctrl', function($scope) {
    $scope.items = [];
    for (var i = 1; i <= 5; i++) {
      var item = {
        name: 'Item ' + i,
        details: 'Here are some details for Item ' + i + ' so that we have something to show in the view.'
      }
      $scope.items.push(item);
    }
  });
<script src = "https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<div ng-app = "app" ng-controller = "ctrl">
  <div ng-repeat = "item in items">
    <h3>{{ item.name }}</h3>
    <button ng-click = "viewMore = !viewMore">
      <span ng-hide = "viewMore">Show</span> 
      <span ng-show = "viewMore">Hide</span> 
      Details
    </button>
    <div ng-show = "viewMore">
      {{ item.details }} 
      <a ng-click = "viewMore = false"
         style = "cursor: pointer; color: orange;">[hide]</a>
    </div>
  </div>
</div>

Другие вопросы по теме