2015-11-16 24 views
11

Mi piacerebbe implementare il trascinamento della selezione nel mio progetto angolare utilizzando il modulo angolare-dragula (https://github.com/bevacqua/angular-dragula). Tuttavia, sembra essere fortemente dipendente da RequireJS. Non ho usato Require per un po 'e solo per un'app di esempio o due. C'è un modo semplice per sbrogliare Richiedi da questo modulo?Utilizzo di Dragula angolare senza RequireJS

L'autore sembra pensare che sia semplice (https://github.com/bevacqua/angular-dragula/issues/23) e ha chiuso anche domande simili senza una vera spiegazione. Ho esaminato il codice e non vedo come caricare il modulo senza aggiungere RequireJS al mio progetto (cosa che non voglio fare). Sono bloccato o non usando questo modulo o aggiungendo Require o c'è un modo per usarlo senza Require?

+0

Scorrendo tra i sorgenti sembra che il dist/angular-dragula.js' dipenda da richiede ma la versione miniata potrebbe non. Hai provato a utilizzare la versione minified per vedere se funziona? – yvesmancera

+0

Sì, l'ho fatto e non sembrava funzionare. Parte del problema è che si aspetta anche di essere inizializzato passando in modo angolare, quindi sto attraversando un periodo difficile includendola solo come dipendenza angolare. – IAmTimCorey

+1

Penso che si possa passargli un'istanza della variabile globale 'angular', dal momento che' require ('angular') 'lo restituirebbe comunque. – yvesmancera

risposta

22

OK, dopo l'aiuto di coloro che hanno commentato (grazie a tutti!), Sono riuscito a farlo funzionare. Ci sono un paio di cose che devi fare. Innanzitutto, stavo raggruppando questo modulo con il resto dei miei moduli e provando a chiamarlo. Ciò non funzionerà perché è necessario inizializzarlo con un parametro (angular). Pertanto, è necessario effettuare le seguenti operazioni:

  1. Aggiungere un riferimento alla angolari-dragula.js (o la versione min) alla tua pagina index.html al di sotto della dichiarazione per angolare ma soprattutto in cui si crea la tua applicazione.
  2. Quando si dichiarano le dipendenze per la propria app, specificare angularDragula(angular) (non tra virgolette).
  3. Usa la dragula come faresti normalmente. Se è necessario accedere al servizio, il nome sarà angularDragula.

Per esempio, qui è la mia dichiarazione di app:

var app = angular.module('app', [ 
    'ngRoute', 
    angularDragula(angular) 
]); 

E poi per ottenere un semplice elenco di essere drag and drop in grado, questo è il mio html:

<div dragula='"bag-one"' dragula-model="vm.items"> 
    <div ng-repeat="item in vm.items">{{ item }}</div> 
</div> 

Nota che non dichiaro angularDragula da nessuna parte, a differenza degli esempi. Nell'esempio fornito dall'autore, richiede angular e crea la variabile angular e quindi richiede angular-dragula e crea la variabile angularDragula. Questo non è necessario se non si utilizza RequireJS finché si caricano gli script nell'ordine corretto.

+0

Sto provando questo nella mia app ionica. Non carico esplicitamente angolare nel mio index.html, ionico lo gestisce. Questo cambia come lo farei? Facendo mentre descrivi 'angularDragula' restituisce' function register (angular) {... 'ma chiamandolo error' non può leggere la proprietà 'module' di undefined' a' var app = angular.module ('dragula', ['ng' ]); ' –

+0

Sto caricando' dist/angular-dragula.js' dopo ionic ma prima di 'app.js' e dichiaro' angularDragula (angular) 'nelle mie dipendenze' app.js' (ho provato entrambi prima e dopo la dipendenza ionica viene caricata senza differenze). –

+1

Non funziona. Non stavo passando la dipendenza corretta al mio controller (dragulaService). Grazie per l'ottima soluzione! –