Dies ist der HTML-Code für meine Direktive:
<textarea data-modal="modal" data-mydir ng:model="abc"></textarea>
In meiner Richtlinie habe ich Folgendes:
return {
require: 'ngModel',
replace: true,
scope: {
modal: '=modal',
ngModel: '=',
pid: '=pid'
},
Kann mir jemand sagen, welche Bedeutung die Anforderung hat: 'ngModel'? Ich sehe das in vielen verschiedenen Richtlinien. Könnte ich das datenmodal nennen?
Ich bin verwirrt, denn wenn ich es auf datenmodal ändere, erhalte ich eine Nachricht von Angular
Controller 'ngModel', required by directive 'textarea', can't be found!
ng-model='property'
Antworten:
Die
require
Anweisung gibt Ihnen den Controller für die Direktive, die Sie als viertes Argument für Ihrelink
Funktion benennen . (Sie können verwenden^
, um nach dem Controller in einem übergeordneten Element zu suchen. Dies?
ist optional.)require: 'ngModel'
Sie erhalten also den Controller für diengModel
Direktive, bei der es sich um eine handeltngModelController
.Direktiven-Controller können so geschrieben werden, dass sie APIs bereitstellen, die andere Direktiven verwenden können. Mit erhalten
ngModelController
Sie Zugriff auf spezielle Funktionen, die integriert sindngModel
, einschließlich Abrufen und Festlegen des Werts. Betrachten Sie das folgende Beispiel:Diese Anweisung verwendet den
ngModel
Controller, um den Wert der Farbe vom Farbpicker abzurufen und einzustellen. Siehe dieses JSFiddle-Beispiel: http://jsfiddle.net/BinaryMuse/AnMhx/Wenn Sie verwenden
require: 'ngModel'
, sollten Sie wahrscheinlich nicht auch verwenden werdenngModel: '='
in Ihrem Isolat Umfang; DasngModelController
gibt Ihnen allen Zugriff, den Sie benötigen, um den Wert zu ändern.Das untere Beispiel auf der AngularJS-Homepage verwendet diese Funktionalität ebenfalls (außer bei Verwendung eines benutzerdefinierten Controllers, nicht
ngModel
).Was das Gehäuse einer Direktive betrifft, z. B.
ngModel
vsng-model
vsdata-ng-model
: Während Angular die Verwendung mehrerer Formulare im DOM unterstütztrequire
, verwenden Sie immer den LowerCamelCase , wenn Sie namentlich auf eine Direktive verweisen (z. B. beim Erstellen einer Direktive oder beim Verwenden einer Direktive ) Form des Namens.quelle
require: 'ngModel'
verwendet werden solltengModel: '='
?Wie in der Dokumentation zum Erstellen benutzerdefinierter Richtlinien angegeben : (Zunächst zu Ihrer Frage im Kommentar)
Die Antwort:
Beispiele:
Zweitens, was
?ngModel
repräsentiert das?Wenn Sie Ihre Direktive verwenden, wird die Verwendung zusammen mit dem Attribut / Controller erzwungen
ng-model
.Die
require
Einstellung(Auszug aus dem Buch AngularJS von Brad Green & Shyam Seshadri)
quelle
Mit
require:'ngModel'
undrequire:'^ngModel'
können Sie das Modell einfügen, das an das Element oder dessen übergeordnetes Element angehängt ist, an das die Direktive gebunden ist.Dies ist im Grunde die einfachste Möglichkeit, ngModel an die Link / Compile-Funktion zu übergeben, anstatt es mit einer Bereichsoption zu übergeben. Sobald Sie Zugriff auf ngModel haben, können Sie seinen Wert mit ändern
$setViewValue
, ihn schmutzig / sauber machen$formatters
, Beobachter anwenden usw.Unten finden Sie ein einfaches Beispiel, um ngModel zu übergeben und seinen Wert nach 5 Sekunden zu ändern.
Demo: http://jsfiddle.net/t2GAS/2/
quelle