Pengontrol 'ngModel', diperlukan oleh perintah '…', tidak dapat ditemukan

88

Apa yang terjadi di sini?

Ini arahan saya:

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

          // do something
        }
    };
});

Berikut adalah contoh dari direktif yang digunakan:

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

Berikut adalah teks kesalahan yang sebenarnya:

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
Shaun Luttin
sumber

Jawaban:

127

Seperti yang dijelaskan di sini: Angular NgModelController , Anda harus menyediakan <inputkontroler yang diperlukanngModel

<input submit-required="true" ng-model="user.Name"></input>
Radim Köhler
sumber
1
Sempurna. Saya menghargai itu! Saya akan menandai ini sebagai jawaban. Saya punya pertanyaan lanjutan. Haruskah saya memposting pertanyaan lain atau mengubah pertanyaan asli saya?
Shaun Luttin
Ini adalah tindak lanjutnya: stackoverflow.com/questions/21807929/…
Shaun Luttin
2
saya telah salah mengetik ng-modelsdan mendapatkan kesalahan ini.
chovy
@ Radim Kohler Saya senang bahwa tanggapan Anda benar-benar membantu seseorang yang membutuhkan, saya sendiri hampir mencapai ini. Dari pernyataan input di atas, untuk atribut "ng-model" dapatkah saya menggunakan rangkaian string seperti "{{RootObjectName +". "+ ModelName}}" ?? !! Karena model saya di $ scope tidak langsung dan secara dinamis dibuat di controller berdasarkan masukan dari DB
pavan kumar
@pavankumar periksa tautan ini next.plnkr.co/edit/… ini ng-model="RootObject[alias]"akan berfungsi jika sesi akan memiliki `$ scope.RootObject = {}; $ scope.alias = "FirstName" `... sebagai pengganti alias, bahkan forEach dapat memberikan nama dinamis
Radim Köhler
8

Salah satu solusi yang mungkin untuk masalah ini adalah ng-modelatribut diperlukan untuk menggunakan arahan itu.

Karenanya menambahkan atribut 'ng-model' dapat menyelesaikan masalah.

<input submit-required="true" ng-model="user.Name"></input>
Ram
sumber
Ini memecahkan masalah saya. Terima kasih. Saya pikir kita telah melewatkan poin bahwa untuk memicu ng-change, harus ada bind model-ng ke elemen.
antonD
1

Anda juga dapat menghapus garis tersebut

  require: 'ngModel',

jika Anda tidak membutuhkan ngModelpetunjuk ini. Menghapus ngModelakan memungkinkan Anda membuat perintah tanpa ngModelkesalahan itu.

ditenagai uap
sumber
0

Saya menghadapi kesalahan yang sama, dalam kasus saya, saya salah mengeja perintah ng-model seperti "ng-moel"

Yang salah: ng-moel = "user.name" Yang benar: ng-model = "user.name"

masukkan deskripsi gambar di sini

Shahidul Haque
sumber