2016-05-04 4 views
3

Ich benutze Drag & Drop über ng2-dragula. Die Drag & Drop-Funktionalität & wird auf diese Weise angewendet:Angular 2: Wie wird die Attributrichtlinie bedingt angewendet?

<div class='container' [dragula]='"first-bag"'> 
    <div>item 1</div> 
    <div>item 2</div> 
</div> 

Wenn ich Winkel verstehen 2 die Art und Weise richtig, wie [dragula]='"first-bag"' meiner div Attribute Directive in Angular genannt wird angebracht 2.

Jetzt habe ich eine Variable in meiner Komponente enableDragNDrop:boolean genannt. Wie kann ich diese Variable verwenden, um [dragula]='"first-bag"' an meinem div nur anzufügen, wenn enableDragNDrop == true?

Wenn enableDragNDrop == false, ich möchte dies:

<div class='container'><!-- no dragula attribute directive, no dragndrop --> 
    <div>item 1</div> 
    <div>item 2</div> 
</div> 

Antwort

2

Es gibt keine Möglichkeit, dynamisch hinzufügen/entfernen Richtlinien durch das Hinzufügen/Entfernen einen Selektor. Der Selektor muss statischer HTML-Code sein, damit die Anweisung angewendet wird. Sie können Funktionen von Dragula nur zum Aktivieren/Deaktivieren verwenden, wenn eine solche Konfigurationsoption zur Verfügung steht.

Ich habe ng2-dragula oder dragula nicht verwendet, aber ich denke, man einen dragModel zuweisen können und es auf diese Weise

<div class='container' dragula [dragulaModel]="dragulaModel"> 
dragulaModel = {start: function() {}}; 

und wenn Sie es aktivieren möchten so konfigurieren, dass ein Modell zuordnen, die doesn 't disable start

enableDrag() { 
    this.dragulaModel = {}; 
} 

Nicht getestet, nur ein bisschen durch die Quelle überflogen.

+0

Ich aktualisierte meine Antwort. –

+0

danke für die antwort. Wenn 'dragulaModel = {start: function() {}};', ist Drag & Drop erlaubt, und wenn ein Element verschoben und gelöscht wird, wird folgender Fehler ausgelöst: 'TypeError: sourceModel.splice ist keine Funktion'. Btw, gibt es zwei Ansätze, wie man mit dem Problem umgehen: man ist komplett zu verhindern Drag & Drop - bis jetzt wissen wir nicht, wie dies zu tun ist. Zweite Möglichkeit ist, dass Drag & Drop möglich ist, aber die Ergebnisse werden nicht gespeichert, zB 'if (enableDragNDrop) this.dragulaService.dropModel.subscribe (this.myCustomOnDropCallback.bind (this))' – Peter

+0

Ich plane nicht tiefer zu tauchen zu diesem Thema, weil ich momentan nicht vorhabe, mich selbst zu benutzen. Ich habe gerade versucht, aus einer Winkelsicht zu helfen. Ich könnte bessere Ergebnisse erzielen, wenn ich speziell nach Dragula frage, ohne Angular zu erwähnen. –

Verwandte Themen