Shift+klik selektiranje checkboxeva sa AngularJS

Pozdrav svima.

Radim jednu aplikaciju u kojoj koristim AngularJS pa sam zapeo na jednom koraku.
Naime, potrebna mi je funkcionalnost selektiranja checkboxeva kao što imaju neke popularne web aplikacije poput Gmail-a, gdje se klikne na prvi odabrani checkbox te na posljednji, te on u tom range-u selektira sve između.

To mi nije problem napraviti sa jQuery-em, međutim filozofija AngularJS-a da se ne radi vanjska DOM manipulacija, te zbog toga to nebi funkcioniralo. Ako napravim sa jQuery-em tu funkcionalnost onda se scope neće updateati i sukladno tome, aplikacija neće raditi kako je zamišljeno.

Kada se selektira jedan po jedan checkbox onda sve funkcionira jer koristim ng-click() direktivu.
Moja ideja je bila da za svaki klik na checkbox proračunam koji je prvi checkbox selektiran i koji je zadnji pa da sve između selektiram unutar scope-a, međutim problem je što ne znam kako ukomponirati ngkeypress(), odnosno proslijediti kontroleru da je u trenutku selektiranja checkboxa bila pritisnuta neka tipka.

Znači ovako je HTML od checkboxa:

 <input type="checkbox" ng-model="alert.checked" ng-click="checkboxClicked()" class="ma-no-delivery">

I u kontroleru sam zamislio nešto ovako otprilike:

$scope.checkboxClicked = function() {
   var first = null;
   var last = null;

   $.each($scope.alerts, function() {
      if(first == null) {
        if(this.checked) first = this.$$hashKey;
      } else {
        // Ovdje bih trebao provjeriti da li je bila pritisnuta shift tipka
        if(this.checked) last = this.$$hashKey;
      }
   });
};

Kako bih mogao proslijediti kontroleru da je u trenutku klika na checkbox bila pritisnuta shift tipka?

Hvala unaprijed.

Nisam radio sa AngularJS, ali ovo bi trebalo raditi:

$scope.checkboxClicked = function( e ) {
   var first = null;
   var last = null;

   $.each($scope.alerts, function() {
      if(first == null) {
        if(this.checked) first = this.$$hashKey;
      } else {
        if ( true === e.shiftKey ) {
          alert( 'Shift je stisnut' );
        } else {
          alert( 'Shift nije stisnut' );
        }
        if(this.checked) last = this.$$hashKey;
      }
   });
};

Taj dio mi je jasan, to sam svakako tako planirao napraviti, ali ono što mi nije jasno kako proslijediti taj event u funkciju.

Npr. kada se sluša event keydown onda napravim ovako:

ng-keydown="nekaAkcija($event)"

Međutim, ja ne želim akciju kada se pritisne tipka nego kad se klikne na checkbox ali da nekako proslijedi da je bila pritisnuta tipka u trenutku selektiranja checkboxa.

Pa tome i sluzi ovaj moj kod? Ili se krivo razumijemo.

Imas ovo

<input type="checkbox" ng-model="alert.checked" ng-click="checkboxClicked()" class="ma-no-delivery">

Dakle kada netko klikne na checkbox, pozivas funkciju checkboxClicked() ne?

I onda u toj funkciji kao prvi parametar primis e objekt (valjda ga AngularJS posalje) te na njemu provjeris e.shiftKey koji to govori da li je shift key bio stisnut tijekom klika.

Sorry, moj previd. Nisam skužio da ng-click() direktiva hvata pritisnute tipke u svom eventu.

Ovo je zapravo vrlo jednostavno za riješit.
Thanks.


Copyright © 2020 WM Forum - AboutContact - Sponsored by: Mydataknox & Webmaster.Ninja