El controlador 'ngModel', requerido por la directiva '…', no se puede encontrar


88

¿Que está pasando aqui?

Aquí está mi directiva:

app.directive('submitRequired', function (objSvc) {
    return {
        require: 'ngModel',
        link: function (scope, elm, attrs, ctrl) {

          // do something
        }
    };
});

A continuación, se muestra un ejemplo de la directiva en uso:

<input submit-required="true"></input>

Aquí está el texto de error real:

Error: [$compile:ctreq] Controller 'ngModel', required by directive 'submitRequired', can't be found!
http://errors.angularjs.org/1.2.2/$compile/ctreq?p0=ngModel&p1=submitRequired
    at http://www.domain.ca/Scripts/angular/angular.js:78:12
    at getControllers (http://www.domain.ca/Scripts/angular/angular.js:5972:19)
    at nodeLinkFn (http://www.domain.ca/Scripts/angular/angular.js:6139:35)
    at compositeLinkFn (http://www.domain.ca/Scripts/angular/angular.js:5550:15)
    at nodeLinkFn (http://www.domain.ca/Scripts/angular/angular.js:6132:24)
    at compositeLinkFn (http://www.domain.ca/Scripts/angular/angular.js:5550:15)
    at publicLinkFn (http://www.domain.ca/Scripts/angular/angular.js:5458:30)
    at http://www.domain.ca/Scripts/angular/angular.js:1299:27
    at Scope.$get.Scope.$eval (http://www.domain.ca/Scripts/angular/angular.js:11634:28)
    at Scope.$get.Scope.$apply (http://www.domain.ca/Scripts/angular/angular.js:11734:23) <input submit-required="true"> angular.js:9159
(anonymous function) angular.js:9159
$get angular.js:6751
nodeLinkFn angular.js:6141
compositeLinkFn angular.js:5550
nodeLinkFn angular.js:6132
compositeLinkFn angular.js:5550
publicLinkFn angular.js:5458
(anonymous function) angular.js:1299
$get.Scope.$eval angular.js:11634
$get.Scope.$apply angular.js:11734
(anonymous function) angular.js:1297
invoke angular.js:3633
doBootstrap angular.js:1295
bootstrap angular.js:1309
angularInit angular.js:1258
(anonymous function) angular.js:20210
trigger angular.js:2315
(anonymous function) angular.js:2579
forEach angular.js:300
eventHandler angular.js:2578ar.js:7874

Respuestas:


127

Como se describe aquí: Angular NgModelController , debe proporcionar el <inputcontrolador requeridongModel

<input submit-required="true" ng-model="user.Name"></input>

1
Perfecto. ¡Soy consciente de que! Marcaré esto como respuesta. Tengo una pregunta de seguimiento. ¿Debo publicar otra pregunta o cambiar mi original?
Shaun Luttin


2
había escrito por error ng-modelsy recibí este error.
Chovy

@Radim Kohler Estoy feliz de que su respuesta realmente haya ayudado a alguien que lo necesita, yo mismo estoy cerca de lograrlo. De la declaración de entrada anterior, para el atributo "ng-model", ¿puedo usar una concatenación de cadenas como "{{RootObjectName +". "+ ModelName}}" ?? !! Como mis modelos en $ scope no son sencillos y se crean dinámicamente en el controlador según la entrada de DB
pavan kumar

@pavankumar revise este enlace next.plnkr.co/edit/… esto ng-model="RootObject[alias]"funcionará si la sesión tendrá `$ scope.RootObject = {}; $ scope.alias = "FirstName" `... instaead of alias, incluso forEach podría proporcionar el nombre dinámico
Radim Köhler

8

Una posible solución a este problema es que ng-modelse requiere atributo para usar esa directiva.

Por lo tanto, agregar el atributo 'ng-model' puede resolver el problema.

<input submit-required="true" ng-model="user.Name"></input>

Esto resolvió el mío. Gracias. Creo que hemos perdido el punto de que para activar ng-change, debería haber un enlace ng-model al elemento.
antonD

1

También puedes eliminar la línea

  require: 'ngModel',

si no lo necesita ngModelen esta directiva. La eliminación ngModelle permitirá crear una directiva sin ese ngModelerror.


0

Enfrenté el mismo error, en mi caso escribí mal la directiva ng-model algo como "ng-moel"

Incorrecto: ng-moel = "user.name" Correcto: ng-model = "user.name"

ingrese la descripción de la imagen aquí

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.