Le contrôleur 'ngModel', requis par la directive '...', est introuvable
Ce qui se passe ici?
Ici sont mes directives:
//template <input ng-model="theModel" />
app.directive('bseInput', function () {
return {
templateUrl: "/Scripts/bse/bse-inputs.html",
scope:
{
theModel: '=',
},
compile: function compile(tElement, tAttrs, transclude) {
//do stuff
}
};
});
app.directive('submitRequired', function (objSvc) {
return {
require: 'ngModel',
link: function (scope, elm, attrs, ctrl) {
//do something
}
};
});
Voici un exemple de la directive en cours d'utilisation:
<input bse-input submit-required="true" the-model="someModel"></input>
Ici est le texte d'erreur:
Erreur: [$compiler:ctreq] Controller 'ngModel', requis par la directive "submitRequired', ne peut pas être trouvé!
http://errors.angularjs.org/1.2.2/$compiler/ctreq?p0=ngModel&p1=submitRequired
au http://www.domain.ca/Scripts/angular/angular.js:78:12
au getControllers (http://www.domain.ca/Scripts/angular/angular.js:5972:19)
au nodeLinkFn (http://www.domain.ca/Scripts/angular/angular.js:6139:35)
au compositeLinkFn (http://www.domain.ca/Scripts/angular/angular.js:5550:15)
au nodeLinkFn (http://www.domain.ca/Scripts/angular/angular.js:6132:24)
au compositeLinkFn (http://www.domain.ca/Scripts/angular/angular.js:5550:15)
au publicLinkFn (http://www.domain.ca/Scripts/angular/angular.js:5458:30)
au http://www.domain.ca/Scripts/angular/angular.js:1299:27
à Scope.$obtenir.La portée.$eval (http://www.domain.ca/Scripts/angular/angular.js:11634:28)
à Scope.$obtenir.La portée.$appliquer (http://www.domain.ca/Scripts/angular/angular.js:11734:23) angulaire.js:9159
(fonction anonyme) angulaire.js:9159
$get angulaire.js:6751
nodeLinkFn angulaire.js:6141
compositeLinkFn angulaire.js:5550
nodeLinkFn angulaire.js:6132
compositeLinkFn angulaire.js:5550
publicLinkFn angulaire.js:5458
(fonction anonyme) angulaire.js:1299
$get.La portée.$eval angulaire.js:11634
$get.La portée.$appliquer angulaire.js:11734
(fonction anonyme) angulaire.js:1297
invoquer angulaire.js:3633
doBootstrap angulaire.js:1295
bootstrap angulaire.js:1309
angularInit angulaire.js:1258
(fonction anonyme) angulaire.js:20210
déclencheur angulaire.js:2315
(fonction anonyme) angulaire.js:2579
forEach angulaire.js:300
gestionnaire angulaire.js:2578ar.js:7874
source d'informationauteur Shaun Luttin
Vous devez vous connecter pour publier un commentaire.
Juste au cas où, que le ci-dessus
<input>
extrait ne contient pas de faute de frappe, c'est la question:nous avons besoin de
ng-model
angulaire est normalisée à l'aide de/dénormalisée conventions de nommage, qui à la fin signifie:
ng-model
est le code html de la manière d'exprimer langModel
. HTML est insensible à la casse... et cela résout ce problèmeSuggestion. Si nous travaillons avec plusieurs directives appliquées à un seul élément:
Nous devrions laisser les deux d'entre eux de travailler avec un standard paramètres d'ENTRÉE. Ainsi, les deux devraient pourraient exiger ng-model, comme un moyen pour accéder au modèle transmis à l'entrée.
si le modèle doit représenter un paramètre différent, ce qui est absolument ok, nous juste ne pas avoir à sauter en passant la ng-model
Sur
require
:Lorsque vous avez imbriqué des directives qui doivent communiquer les uns avec les autres, la façon de
le faire est par le biais d'un contrôleur.
D'autres directives peuvent avoir ce contrôleur est transmis avec le besoin de propriété
la syntaxe. La forme complète de besoin ressemble:
Explications de l'exiger de chaîne:
directiveName
: Ce camelcase nom spécifie la directive, le contrôleur devrait venir de la. Donc, si nosla directive doit trouver un contrôleur sur son parent , nous avions l'écrire comme myMenu.
^
Par défaut, Angulaire obtient le contrôleur de la directive sur le même élément. L'ajout de cette optionsymbole ^ dit aussi marcher jusqu'à l'arbre du DOM pour trouver de la directive. Pour l'exemple, nous aurions besoin d'
pour ajouter ce symbole; la finale de la chaîne de \^myMenu.
?
Si le contrôleur n'est pas trouvé, Angulaire lèvera une exception pour vous parler du problème. L'ajout d'un ? symbole à la chaîne indique que ce contrôleur est facultatif et qu'une exception ne devrait pas être levée si pas
trouvé. Si cela semble peu probable, si l'on voulait laisser s être utilisé sans
conteneur, on pourrait ajouter ce pour un final requièrent de la chaîne d' ?\^myMenu.