2014-07-21 13 views
8

In sostanza, vorrei che gli utenti fossero in grado di trascinare e rilasciare un elemento o fare clic sulle frecce su/giù per spostare un elemento nell'elenco.Aggiorna manualmente gli elementi ordinabili nell'interfaccia utente angolare

C'è un buon modo per aggiornare gli indici degli elementi che funzionano bene con ui-sortable/angular-ui?

Grazie.

aggiornamento

siamo stati in grado di risolvere questo aggiungendo una funzione nel nostro controller che rimuovere l'elemento dall'array e inserirlo ritorno in un indice maggiore o minore rispetto alla sua posizione originale. Ecco un esempio sciatta:

$scope.upDown = function(oldIndex, newIndex) { 
    var item = $scope.list[oldIndex]; 
    $scope.list.splice(oldIndex,1); 
    $scope.list.splice(newIndex,0,item); 
}; 

http://jsfiddle.net/69auq/1/

si avrebbe bisogno di aggiungere un controllo se fosse la prima o l'ultima elem nella matrice di disattivare alto o in basso di conseguenza.

+0

Nel momento in cui l'ordinamento si è interrotto, che è possibile acquisire, gli elementi sul mirino saranno nel loro nuovo ordine. Spingili, o i loro id per un servizio. – Darren

+0

Potresti postare la tua soluzione come risposta e accettarla? –

risposta

0

siamo stati in grado di risolvere questo problema aggiungendo una funzione nel nostro controller che avrebbe rimosso l'elemento dall'array e lo avrebbe aggiunto in un indice maggiore o minore rispetto alla sua posizione originale. Ecco un esempio sciatta:

$scope.upDown = function(oldIndex, newIndex) { 
    var item = $scope.list[oldIndex]; 
    $scope.list.splice(oldIndex,1); 
    $scope.list.splice(newIndex,0,item); 
}; 

http://jsfiddle.net/69auq/1/

si avrebbe bisogno di aggiungere un controllo se fosse la prima o l'ultima elem nella matrice di disattivare alto o in basso di conseguenza.

0

Come per tutto AngularJS, la risposta è "think in Angular, not jQuery".

This CodePen fa un buon lavoro illustrando come farlo. Fondamentalmente, hai un oggetto temporale con scope per il trascinamento, che poi inserisci nell'array associato di ng-repeat. Non posso prendermene il merito (non la mia creazione), ma Google mi ha portato a farlo abbastanza velocemente. CodePen non usa alcuna dipendenza esterna, ma come puoi vedere, significa un po 'più di lavoro che usare qualcosa come Angular-UI.

Ecco lo a JSFiddle che mostra lo stesso concetto, ma con la dipendenza da Angular-UI. Il vantaggio di utilizzare angolare-ui è che l'array dati associati ha solo bisogno di essere invocata in quanto tale:

var myapp = angular.module('myapp', ['ui']); 

myapp.controller('controller', function ($scope) { 
    $scope.list = ["one", "two", "three", "four", "five", "six"]; 
}); 

Questo significa meno lavoro da parte vostra, dal momento che è già stato capito. AngularJS fa un buon lavoro giocando bene con jQuery, quindi questo non dovrebbe dettare un enorme cambiamento nell'approccio allo sviluppo dall'interfaccia utente di jQuery, a seconda del tuo caso d'uso.

+0

questo non risponde alla mia domanda. Sto usando angular-ui che fornisce la funzionalità di trascinamento della selezione. Devo anche essere in grado di spostare un singolo elemento su/giù 1 indice nell'array senza trascinare e rilasciare. – juliaallyce

+0

Immagino di essere confuso perché stai cercando di manipolare la lista, che è già circoscritta, invocando una funzione quando la funzionalità è inclusa dalla natura della manipolazione dell'array di dati con scope. Inoltre, apparentemente ho perso la dipendenza da 'ui'. Grazie per aver pubblicato la tua soluzione di lavoro. –