Voici le HTML de ma directive:
<textarea data-modal="modal" data-mydir ng:model="abc"></textarea>
Dans ma directive, j'ai ceci:
return {
require: 'ngModel',
replace: true,
scope: {
modal: '=modal',
ngModel: '=',
pid: '=pid'
},
Quelqu'un peut-il me dire quelle est la signification de require: 'ngModel'? Je vois cela dans de nombreuses directives différentes. Puis-je appeler cela data-modal?
Je suis confus parce que lorsque je le change en modal de données, je reçois un message d'Angular disant
Controller 'ngModel', required by directive 'textarea', can't be found!
ng-model='property'
Réponses:
L'
require
instruction vous donne le contrôleur de la directive que vous nommez comme quatrième argument de votrelink
fonction. (Vous pouvez utiliser^
pour rechercher le contrôleur sur un élément parent; le?
rend facultatif.)require: 'ngModel'
Vous donne donc le contrôleur pour langModel
directive, qui est unngModelController
.Les contrôleurs de directive peuvent être écrits pour fournir des API que d'autres directives peuvent utiliser; avec
ngModelController
, vous avez accès à des fonctionnalités spéciales intégréesngModel
, notamment l'obtention et la définition de la valeur. Prenons l'exemple suivant:Cette directive utilise le
ngModel
contrôleur pour obtenir et définir la valeur de la couleur à partir du sélecteur de couleurs. Voir cet exemple JSFiddle: http://jsfiddle.net/BinaryMuse/AnMhx/Si vous utilisez
require: 'ngModel'
, vous ne devriez probablement pas également l'utiliserngModel: '='
dans votre champ d'isolat; lengModelController
vous donne tous les accès dont vous avez besoin pour modifier la valeur.L'exemple du bas de la page d'accueil AngularJS utilise également cette fonctionnalité (sauf en utilisant un contrôleur personnalisé, pas
ngModel
).En ce qui concerne la casse d'une directive, par exemple,
ngModel
vsng-model
vsdata-ng-model
: alors que Angular prend en charge l'utilisation de plusieurs formulaires sur le DOM, lorsque vous faites référence à une directive par son nom (par exemple, lors de la création d'une directive, ou de l'utilisationrequire
), vous utilisez toujours le lowerCamelCase forme du nom.la source
require: 'ngModel'
à utiliserngModel: '='
?Comme indiqué dans la documentation relative à la création de directives personnalisées : (d'abord à votre question dans le commentaire)
La réponse:
Exemples:
Deuxièmement, que
?ngModel
représente le?Lorsque vous utilisez votre directive, elle la force à être utilisée avec l'attribut / contrôleur
ng-model
.Le
require
décor(Extrait du livre AngularJS de Brad Green & Shyam Seshadri)
la source
Les
require:'ngModel'
etrequire:'^ngModel'
vous permettent d'injecter le modèle attaché à l'élément ou à son élément parent auquel la directive est liée.C'est fondamentalement le moyen le plus simple de passer ngModel dans la fonction link / compile au lieu de le passer en utilisant une option scope. Une fois que vous avez accès à ngModel, vous pouvez modifier sa valeur en utilisant
$setViewValue
, le rendre sale / propre en utilisant$formatters
, appliquer des observateurs, etc.Voici un exemple simple pour passer ngModel et changer sa valeur après 5 secondes.
Démo: http://jsfiddle.net/t2GAS/2/
la source