Wie benutzt man [(ngModel)] auf div's contenteditable in angular2?
Ich versuche, mit ngModel, um zwei-Weg-binden div ' s contenteditable input-Materialien wie folgt:
<div id="replyiput" class="btn-input" [(ngModel)]="replyContent" contenteditable="true" data-text="type..." style="outline: none;" ></div>
aber es nicht funktioniert und ein Fehler tritt auf:
EXCEPTION: No value accessor for '' in [ddd in PostContent@64:141]
app.bundle.js:33898 ORIGINAL EXCEPTION: No value accessor for ''
InformationsquelleAutor der Frage Kim Wong | 2016-02-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
NgModel
erwartet, dass das gebundene element, um einevalue
Eigenschaft, diediv
s nicht haben. Das ist, warum Sie bekommen dieNo value accessor
Fehler.Können Sie Ihre eigenen Mietobjekt und event-binding mit der
textContent
Eigenschaft (stattvalue
) und dieinput
Veranstaltung:Plunker
Ich weiß nicht, ob die
input
Veranstaltung wird unterstützt auf allen Browsern fürcontenteditable
. Sie konnte immer binden einige Tastatur-event statt.InformationsquelleAutor der Antwort Mark Rajcok
Aktualisierte Antwort (2017-10-09):
Nun habe ich ng-contenteditable Modul. Seine Kompatibilität mit Eckigen Formen.
Alte Antwort (2017-05-11):
In meinem Fall kann ich einfach zu tun:
Wo
post
- es ist Objekt mit der EigenschaftpostTitle
.Ersten mal, nachdem
ngOnInit()
und bekommenpost
aus backend, ichthis.postTitle = post.postTitle
in meine Komponente.InformationsquelleAutor der Antwort ktretyak
Arbeiten Plunkr hier http://plnkr.co/edit/j9fDFcaber die entsprechenden code.
Bindung an und aktualisieren Sie manuell
textContent
war nicht für mich arbeiten, es nicht handhaben Zeilenumbrüche (in Chrome eingeben, nach einem Zeilenumbruch springt der cursor wieder an den Anfang) aber ich war in der Lage, es zu bekommen Arbeit, indem Sie eine contenteditable Modell-Richtlinie aus https://www.namekdev.net/2016/01/two-way-binding-to-contenteditable-element-in-angular-2/.Ich optimiert zu behandeln multi-line-plain-text (mit
\n
s, nicht<br>
s) mitwhite-space: pre-wrap
und aktualisierte es zu verwendenkeyup
stattblur
. Beachten Sie, dass einige Lösungen zu diesem problem verwenden dieinput
Ereignis, das nicht unterstützt in IE oder Edge aufcontenteditable
Elemente noch.Hier der code:
Richtlinie:
Verwendung:
Nur getestet in Chrome und FF auf Linux so weit.
InformationsquelleAutor der Antwort tobek
Hier eine andere versionbasierend auf dem @tobek Antwort, die auch unterstützt html und einfügen:
InformationsquelleAutor der Antwort Rene Hamburger
Habe ich fummelte, um mit diesen Lösungen und wird verwenden Sie die folgende Lösung in meinem Projekt:
Ich lieber mit dem template Referenz-Variablen "$event" Zeug.
Link zum Thema:
https://angular.io/guide/user-input#get-user-input-from-a-template-reference-variable
InformationsquelleAutor der Antwort Flo
Hier ist eine einfache Lösung, wenn das, was Sie verbindlich sind, ist ein string, keine Ereignisse, die nötig sind. Setzen Sie einfach ein Textfeld, die Eingabe innerhalb der Tabelle auf die Zelle und binden an. Dann formatieren Sie Ihren text-box, transparent
HTML:
InformationsquelleAutor der Antwort Isaac