AngularJs ng-repeat cu index (Programare, Angularjs, Angularjs Ng Repeat)

user3194721 a intrebat.
a intrebat.

Vreau să arăt numele din această secțiune doar atunci când se face clic pe butonul de afișare. Încerc să detectez folosind index, dar nu am avut succes.

Code:

<div ng-repeat="c in customers">

   <a ng-click="display(c.id[$index])" ng-hide="need to hide after click this one">{{vm.updateText}}</a>
   <div ng-show="c.id[$index]" class="updateSection">
        <input type="text" name="id" data-ng-model="id" />
          <input type="button" ng-click="vm.veryId(id)" value="{{vm.verifyButtonText}}">
          <input type="button" ng-click="vm.Cancel()" value="{{vm.cancelButtonText}}">
       </div>
    </div>
    // will show ng-click="vm.veryId(id)"
    <rpe-progress data-ng-show="vm.showProgress" block="true"></rpe-progress>
    // if id is working will show following error message:
    <rpe-alert show="vm.mpnIdAlert">{{vm.errormessage}}</rpe-alert>        



<script>
   vm.display= function (index) {    
      vm.id[index] = true;  
  //   I want show updatesection & hide Update text   
   }
vm.cancel= function () {   
//   I want hide updatesection & show Update text 
       }


  vm.veryId= function (id) {   
    //  If id is wrong show error message.
           }
</script>

4 răspunsuri
codeninja.sj

Logica postată @Pevara este absolut în regulă. Îți sugerez să mergi pe această logică.

Nu înțeleg cazul de utilizare real al problemei tale. Așadar, dacă doriți cu adevărat să realizați această logică cu $index atunci, puteți utiliza fragmentul de cod de mai jos pentru a vă îndeplini sarcinile.

glcheetham

Dacă înțeleg corect întrebarea dvs., ar trebui să folosiți track by

Ca un exemplu:

<div ng-repeat="n in [42, 42, 43, 43] track by $index">
  {{n}}
  <p ng-show="$index === 3">Index is 3</p>
</div>

https://docs.angularjs.org/api/ng/directive/ngRepeat

Comentarii

  • acesta a fost doar un exemplu pentru a demonstra utilizarea track by –  > Por glcheetham.
Pevara

Nimic ce nu poți face în șablonul tău, nu este nevoie de acea funcție. Tot ce trebuie să faceți este să comutați niște show proprietate pe acel item.

Aruncați o privire la acest exemplu:https://plnkr.co/edit/YS5zhU3pHMxut34XwPtR?p=preview

      <li ng-repeat="item in items">
        <p>{{item.id}}</p>
        <p ng-if="item.show">
          {{item.name}}
        </p>
          <button ng-click="item.show = ! item.show">toggle</button>
      </li>

Dacă nu doriți să se schimbe, puteți face ceva de genul acesta:

<button ng-click="item.show = true">show</button>

Comentarii

  • Acesta este doar un exemplu de cod, dar codul meu are căsuțe de text și mesaje de eroare etc… așa că încerc să folosesc indexul. –  > Por user3194721.
  • Nu înțeleg de ce ai vrea să complici lucrurile în felul acesta… Ar trebui să puteți adăuga în continuare un show proprietate la fiecare element c din customers array. Doar păstrați-l simplu și ușor de citit. Dacă sunteți dispus să postați codul complet, aș fi bucuros să adaptez exemplul meu la cazul dumneavoastră de utilizare. –  > Por Pevara.
Sunil Choudhary

dacă matricea de obiecte a clienților conține numele însuși, atunci treceți obiectul însuși în loc să treceți $index.

Vedeți aici:https://plnkr.co/edit/I7F4ZT5acm41P1fW58Hr?p=preview

<button ng-click="clickMe(x)">Click Me</button>
$scope.clickMe = function(x){
  $scope.selected = x;
}