Ich muss auf das Modell durch das HTML-Element in angular2 zugreifen. In meinem Fall benutze ich ng2-Dragula, um Drag & Drop durchzuführen und der Dienst hat nur Zugriff auf die gezogenen HTML-Elemente. Und ich muss das entsprechende Modell des Elements aktualisieren. Heres das Problem bei github.Get-Modell von HTML-Element in angular2
Antwort
Wenn Ihr ngFor aus einem Array kompiliert wurde, müssen Sie ein Modell bereitstellen, indem Sie das Attribut tugulaModel für das Element bag festlegen.
<ul [dragula]='"bag-one"' [dragulaModel]='items'> <li *ngFor="let item of items"></li> </ul>
Und wenn Sie neu zu positionieren die Elemente, wird das Modell synchronisiert werden. In Ihrer Komponente können Sie das aktualisierte Modell auf einfache Weise erhalten.
this.dragulaService.drop.subscribe((value) => {
//let [bagName, e, el] = value;
console.log(this.items);
});
Sie werden feststellen, dass die Artikel in Ihrem Modell neu positioniert werden.
Gibt es keine Möglichkeit, eindeutig zu sagen, welcher Gegenstand bewegt wird? – Umagon
Sie können das Modell Ihres Artikels erhalten, indem Sie nach dem Index element
in elementList
suchen, der von den Argumenten des Abonnements bereitgestellt wird.
dragulaService.drop.subscribe(e => this.onDrop(e.slice(1)));
Sehen Sie?
UPDATE: Vereinfachung (Dank Dracco)
private onDrop(args) {
let [e, el] = args; //element, elementList
let i = el.children.indexOf(e),
item = i+1? this.items[i] : null;
console.log(item); //The item
}
this.items
ist die Variable, in dem Sie die Liste speichern Sie dragula passieren. (z.B. [dragulaModel]="items"
).
Ich wünschte, es gäbe einen einfacheren Weg. Sag mir, wenn du eins findest!
Alte Art und Weise:
private onDrop(args) {
let [e, el] = args; //element, elementList
let item;
for(let i in el.children){
if(el.children[i]==e){
item = this.items[+i];
break;
}
}
console.log(item); //The item
}
EDIT: die Vereinfachung hatte einen Fehler.
Einfachere Form des gleichen Wegs: benutze indexOf https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf – Dracco
Ich kann das Modell nicht von diesem erhalten. Nur Verweise auf HTML-Elemente –
Entschuldigung, das simplied Formular hatte einen Fehler. Ich habe es jetzt behoben. – Umagon
Stellen Sie sicher, dass Sie el.children in ein ES6-Array einpacken.
let i = el.children.indexOf(e)
Sollten seine
let i = Array.from(el.children).indexOf(e)
Ich fand auch, dass mit dem Index von der übergeordneten Liste erzeugte unvorhersehbare Ergebnisse und manchmal erzeugte neue undefinierte Elemente das untergeordnete Element abruft.
Alternative Direkt ID Lösung:
<ion-item *ngFor="let child of children" [id]="child"></ion-item>
und dann in der onDrop Methode
console.log(e.id);
- 1. Get HTMLElement von Element
- 2. Argument von Htmlelement Typ von console.select erwartet()
- 3. hasOwnProperty Htmlelement Firefox
- 4. Wie erhalten Sie Style-Werte von einem HTMLElement mit angular2 und Typescript
- 5. Entfernen von HtmlElement-Objekten programmgesteuert mit C#
- 6. Get google.maps.Map-Instanz von einem HTMLElement
- 7. iframe in angular2 Komponente, Property 'contentWindow' existiert nicht im Typ 'HTMLElement'
- 8. Konvertieren eines HtmlElement in ein Image?
- 9. javascript: erstellen Htmlelement aus string
- 10. Datenbindung für JavaScript HTMLElement -Eigenschaft in Polymer
- 11. ersetzen Htmlelement mit XML Elemente
- 12. Welche HTMLElement-Eigenschaft ändert DOMAttrModified?
- 13. Komponenten dynamisch in Angular2 einfügen
- 14. `this` Schlüsselwort löst in HTMLElement in Polymer in BeforeRegister-Methode
- 15. Gemeinsame Schnittstelle für HTMLElement und HTMLDocument?
- 16. Verwenden Sie GetElementById auf HTMLElement anstelle von HTMLDocument
- 17. Update-Text von HTMLElement ohne Auswirkungen auf untergeordnete Elemente
- 18. Auslösen von Formularvalidatoren in angular2
- 19. Testen von routerOnActivate in angular2
- 20. Zurücksetzen von Formularen in Angular2
- 21. JQuery UI Datepicker in angular2
- 22. Syntaxfehler, unerkannter Ausdruck: # [Objekt HTMLElement] Fehler
- 23. angular2 (angular2-Samen) unter Verwendung von Pfaden in der Einfuhren ../../
- 24. Wie konvertiert man ein HTMLElement in eine Zeichenfolge
- 25. Verwendung von Polymer-Papier-Dialog in angular2 typescript App
- 26. Angular2 Google Kuchendiagramm Visualisierung
- 27. Angular2 Äquivalent von angular.isArray
- 28. Observable von ZoneAvarePromise Angular2
- 29. Angular2 Benutzerdefinierte Ereignisse
- 30. Verwendung von mobilen Ereignissen in Angular2
Mit "Modell des Elements" meinen Sie einige Eigenschaften der Komponente? Irgendein Code würde helfen (Plunker bevorzugt). –
@MarkRajcok Der Code ist bei Github, der Link ist am Ende der Frage. Ich meinte das angular2-Modell, das dieses Element erscheinen lässt. Lassen Sie es mich wissen, wenn es nach der Überprüfung des Codes nicht klar ist. –
Ich bin mir nicht bewusst, wie ich "vom HTML-Element zur Komponente" gehen kann, dh bei einem HTML-Code weiß ich nicht, wie ich einen Verweis auf die Komponente bekomme, wo das HTML-Element verwendet wird ... die Komponente wessen Vorlage hat dieses HTML-Element. –