Не вдається знайти контролер '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
Ідеально Я ціную це! Я позначу це як відповідь. У мене є подальше запитання. Чи слід мені опублікувати ще одне запитання чи змінити оригінал?
Шон Луттін,

Ось наступний підсумок: stackoverflow.com/questions/21807929 / ...
Shaun Luttin

2
я помилково набрав ng-modelsі отримав цю помилку.
чови

@Radim Kohler Я радий, що ваша відповідь насправді допомогла комусь, хто цього потребує, і я сам близький до досягнення цього. З наведеного вище вхідного твердження, для атрибута "ng-model" я можу використовувати конкатенацію рядків, наприклад "{{RootObjectName +". "+ ModelName}}" ?? !! Оскільки мої моделі в області $ не є простими і вони динамічно створюються в контролері на основі вхідних даних від DB
pavan kumar

@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-змін має бути прив’язка ng-моделі до елемента.
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.