Контроллер ngModel, требуемый директивой «…», не найден


88

Что тут происходит?

Вот моя директива:

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

          // do something
        }
    };
});

Вот пример используемой директивы:

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

Вот фактический текст ошибки:

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

Ответы:


127

Как описано здесь: Angular NgModelController , вы должны предоставить <inputтребуемый контроллерngModel

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

1
Отлично. Я ценю это! Я отмечу это как ответ. У меня есть дополнительный вопрос. Следует ли мне опубликовать другой вопрос или изменить исходный?
Shaun Luttin

Вот продолжение: stackoverflow.com/questions/21807929/…
Shaun Luttin

2
я ошибочно набрал ng-modelsи получил эту ошибку.
chovy

@Radim Kohler Я рад, что ваш ответ действительно помог кому-то в беде, я сам близок к этому. Из приведенного выше оператора ввода для атрибута "ng-model" могу ли я использовать конкатенацию строк, например "{{RootObjectName +". "+ ModelName}}" ?? !! Поскольку мои модели в $ scope не являются простыми и динамически создаются в контроллере на основе входных данных из БД
паван кумар

@pavankumar проверьте эту ссылку next.plnkr.co/edit/… это ng-model="RootObject[alias]"будет работать, если в сеансе будет `$ scope.RootObject = {}; $ scope.alias = "FirstName" `... вместо псевдонима даже forEach может предоставить динамическое имя
Radim Köhler

8

Одно из возможных решений этой проблемы - ng-modelатрибут, необходимый для использования этой директивы.

Следовательно, добавление атрибута ng-model может решить проблему.

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

Это решило мою проблему. Спасибо. Я думаю, мы упустили тот момент, что для запуска ng-change должна быть привязка ng-model к элементу.
antonD

1

Вы также можете удалить строку

  require: 'ngModel',

если вам не нужна ngModelэта директива. Удаление ngModelпозволит вам создать директиву без этой ngModelошибки.


0

Я столкнулся с той же ошибкой, в моем случае я неправильно написал директиву ng-model, что-то вроде "ng-moel"

Неправильный: ng-moel = "user.name" Правильный: ng-model = "user.name"

введите описание изображения здесь

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.