2015-11-16 2 views
0

Я работаю над кросс-браузерным приложением, использующим Ionic Framework. У меня есть страница шаблона Master-Detail. У меня есть три пункта на моей странице с подробными сведениями. Когда я удаляю один из элементов, я хочу удалить div-сообщение из DOM с помощью директивы ng-if, но только после того, как пользователь нажал кнопку «Да» на экране подтверждения ionicPopup. В настоящее время я могу изменить все три элемента, но у меня ужасное время выяснить, как приложить изменения только к выбранному элементу. Код ниже:Применить ng-if в ng-repeat только к выбранному элементу

Detail.html:

<ion-view title="Events" cache-view="false"> 
<ion-content has-header="true" padding="false"> 
    <div class="list card" ng-repeat="details in tag.Activity track by $index"> 
     <div ng-if="!deletedItem"> 
      This item will be deleted. 
     </div> 
     <div class="item item-divider item-stable" ng-click="toggleGroup(details)" ng-class="{ active: isGroupShow(details) }"> 
      <i class="icon" ng-class="isGroupShown(details) ? 'ion-arrow-down-b' : 'ion-arrow-right-b'"></i> 
      &nbsp; 
      {{ details.ActivityName }} 
     </div> 
     <div class="item-body item-accordion" ng-show="isGroupShown(details)"> 
      <label class="item"> 
       <span class="input-label item-stacked-label">Hours</span> 
       <input type="hours" value="{{ details.Hours}}"> 
      </label> 
     </div> 

     <div class="item tabs tabs-secondary tabs-icon-left"> 
      <a class="tab-item" ng-click="deleteHours($index, details.RecordID)"> 
       <i class="icon ion-close-circled"></i> 
       Delete Hours 
      </a> 
     </div> 

    </div> 
</ion-content> 

Controller.js:

$scope.deleteHours = function(column,id){ 
    $ionicPopup.confirm({ 
     title: "<b>Delete Hours</b>", 
     template: "Are you sure you want to delete these hours?", 
     buttons: [ 
      { text: 'Cancel', onTap: function(e) { return true; } }, 
      { 
       text: "<b>I'm sure</b>", 
       type: 'button-positive', 
       onTap: function(e) { 
        $scope.deletedItem = true; 
        console.log("Column: " + column); 
       } 
      } 
     ] 
    }) 

В настоящее время номер столбца печатает правильно. Значения передаются. Я просто не могу понять синтаксис, чтобы правильно прикрепить номер столбца к ng-if. Любая помощь будет оценена по достоинству.

+0

'$ scope.deletedItems = [];' '$ scope.deletedItems.push (колонка);' 'нг-, если =" deletedItems.indexOf ($ индекс) == - 1 "' –

+0

Спасибо! Это тоже помогло мне! –

ответ

1

Вы передаете колонку в функцию deleteHours, почему бы вам не просто добавить объект pendingDeletion к деталям?

<ion-view title="Events" cache-view="false"> 
<ion-content has-header="true" padding="false"> 
    <div class="list card" ng-repeat="details in tag.Activity track by $index"> 
     <div ng-if="details.pendingDeletion"> 
      This item will be deleted. 
     </div> 
     <div class="item item-divider item-stable" ng-click="toggleGroup(details)" ng-class="{ active: isGroupShow(details) }"> 
      <i class="icon" ng-class="isGroupShown(details) ? 'ion-arrow-down-b' : 'ion-arrow-right-b'"></i> 
      &nbsp; 
      {{ details.ActivityName }} 
     </div> 
     <div class="item-body item-accordion" ng-show="isGroupShown(details)"> 
      <label class="item"> 
       <span class="input-label item-stacked-label">Hours</span> 
       <input type="hours" value="{{ details.Hours}}"> 
      </label> 
     </div> 

     <div class="item tabs tabs-secondary tabs-icon-left"> 
      <a class="tab-item" ng-click="deleteHours($index, details)"> 
       <i class="icon ion-close-circled"></i> 
       Delete Hours 
      </a> 
     </div> 

    </div> 
</ion-content> 

controller.js

$scope.deleteHours = function(column,detail){ 
    //pass detail, not record id. you can change this if you want to do information hiding. 
    $ionicPopup.confirm({ 
     title: "<b>Delete Hours</b>", 
     template: "Are you sure you want to delete these hours?", 
     buttons: [ 
      { text: 'Cancel', onTap: function(e) { return true; } }, 
      { 
       text: "<b>I'm sure</b>", 
       type: 'button-positive', 
       onTap: function(e) { 
        detail.pendingDeletion = true; //attach to detail 
        console.log("Column: " + column); 
       } 
      } 
     ] 
    }) 
+0

Это сработало отлично! Огромное спасибо. Оглядываясь назад, я вижу, что я сильно переусердствовал эту проблему. Еще раз спасибо! –

+0

Нет проблем, просто слово предупреждения, когда вы будете следовать этому шаблону, если вы сохраняете (в этом случае вы удаляете) эту сущность в конец, помните, что вы украсили эту «деталь» новым атрибутом , поэтому убедитесь, что вы дезинфицируете его перед тем, как сериализовать его на своем внутреннем сервере. Некоторые back-end могут паниковать, когда видят дополнительные атрибуты, которые не являются членами класса. – maschwenk

+0

Hey maschwenk - просто хотел сообщить вам, что я читал ваш комментарий несколько раз, я думаю, что понимаю, что вы имеете в виду, и я очень ценю, как вы справляетесь с этой потенциальной проблемой. Всегда здорово получить голову над потенциальными камнями преткновения! Еще раз спасибо! :) –

Смежные вопросы