Saya mencoba "menyesuaikan" contoh mongolab agar sesuai dengan API REST saya sendiri. Sekarang saya mengalami kesalahan ini dan saya tidak yakin apa yang saya lakukan salah:
Error: Unknown provider: ProductProvider <- Product
at Error (unknown source)
at http://localhost:3000/js/vendor/angular.min.js:28:395
at Object.c [as get] (http://localhost:3000/js/vendor/angular.min.js:26:180)
at http://localhost:3000/js/vendor/angular.min.js:28:476
at c (http://localhost:3000/js/vendor/angular.min.js:26:180)
at d (http://localhost:3000/js/vendor/angular.min.js:26:314)
Ini adalah pengontrol saya:
function ProductListCtrl($scope, Product) {
$scope.products = Product.query();
}
dan ini adalah modul:
angular.module('productServices', ['ngResource']).
factory('Product', ['$resource', function($resource){
var Product = $resource('/api/products/:id', { }, {
update: { method: 'PUT' }
});
return Product;
}]);
Jawaban:
Kode Anda terlihat bagus, bahkan berfungsi (terlepas dari panggilannya sendiri) ketika disalin & disisipkan ke dalam sampel jsFiddle: http://jsfiddle.net/VGaWD/
Sulit mengatakan apa yang sedang terjadi tanpa melihat contoh yang lebih lengkap tapi saya harap jsFiddle di atas akan membantu. Yang saya curigai adalah bahwa Anda tidak menginisialisasi aplikasi Anda dengan modul 'productServices' . Ini akan memberikan kesalahan yang sama, kita bisa melihat ini di jsFiddle lain: http://jsfiddle.net/a69nX/1/
Jika Anda berencana untuk bekerja dengan AngularJS dan MongoLab saya akan menyarankan menggunakan adaptor yang ada untuk $ resource dan MongoLab : https://github.com/pkozlowski-opensource/angularjs-mongolab. Ini meringankan banyak rasa sakit bekerja dengan MongoLab, Anda dapat melihatnya beraksi di sini: http://jsfiddle.net/pkozlowski_opensource/DP4Rh/ Penafian! Saya memelihara adaptor ini (ditulis berdasarkan contoh AngularJS) jadi saya jelas bias di sini.
sumber
<body ng-app="productServices">
dan yang lainnya memiliki<body ng-app="">
.Fiddle Options
tab di sebelah kananSaya mendapatkan kesalahan itu karena saya memberikan parameter yang salah ke definisi pabrik. Saya punya:
Ini berhasil ketika saya menghapus
$scope
dan mengubah definisi pabrik menjadi:Jika Anda perlu menyuntikkan
$scope
, gunakan:sumber
Saya hanya punya masalah serupa. Kesalahan mengatakan hal yang sama dalam pertanyaan, mencoba menyelesaikannya dengan jawaban pkozlowski.opensource dan Ben G, yang keduanya merupakan jawaban yang benar dan baik.
Masalah saya memang berbeda dengan kesalahan yang sama:
di HTML-Code saya, saya punya inisialisasi seperti ini ...
Sedikit lebih jauh ke bawah saya mencoba melakukan sesuatu seperti ini:
Saya menyingkirkan yang pertama ... lalu bekerja ... jelas Anda tidak dapat menginisialisasi aplikasi-ng dua kali atau lebih. cukup adil.
Saya benar-benar lupa tentang "ng-app" pertama dan merasa sangat frustrasi. Mungkin ini akan membantu seseorang suatu hari nanti ...
sumber
Pastikan utama Anda
app.js
menyertakan layanan yang menjadi sandarannya. Sebagai contoh:sumber
productServices
harus modul, jadi tidak relevan apa yang ada di dalam modul tersebut (layanan atau tidak).Jawaban pkozlowski benar, tetapi kalau-kalau ini terjadi pada orang lain, saya mengalami kesalahan yang sama setelah membuat modul yang sama dua kali karena kesalahan; definisi kedua mengesampingkan penyedia yang pertama:
Saya membuat modul dengan melakukan
kemudian sedikit lebih jauh ke bawah di file yang sama:
Cara yang benar untuk melakukan ini adalah:
sumber
Dalam kasus saya, saya telah menetapkan penyedia baru, katakanlah,
xyz
Ketika Anda mengkonfigurasi penyedia di atas, Anda harus menyuntikkannya dengan
Provider
string yang ditambahkan ->xyz
menjadixyzProvider
.Ex:
Jika Anda menyuntikkan penyedia di atas tanpa string 'Penyedia', Anda akan mendapatkan kesalahan serupa di OP.
sumber
Pada akhir file JS untuk menutup fungsi pabrik yang saya miliki
});
dari pada
}());
sumber
})();
Ini membuat saya terlalu lama untuk dilacak. Pastikan Anda minisafe controller Anda dalam arahan Anda.
Semoga itu bisa membantu
sumber
Untuk menambahkan pengalaman saya sendiri di sini, saya mencoba menyuntikkan layanan ke salah satu fungsi konfigurasi modul saya. Paragraf ini dari dokumen yang akhirnya saya temukan menjelaskan mengapa itu tidak berhasil:
Berarti Anda bisa menyuntikkan penyedia ke fungsi module.config (...), tetapi Anda tidak bisa menyuntikkan layanan, untuk itu Anda harus menunggu hingga module.run (...), atau mengekspos penyedia yang dapat Anda suntikkan ke modul. konfigurasi
sumber
Bagi saya, kesalahan ini disebabkan oleh menjalankan versi yang diperkecil dari aplikasi sudut saya. Dokumen sudut menyarankan cara untuk mengatasi ini. Berikut adalah kutipan yang relevan yang menjelaskan masalah ini, dan Anda dapat menemukan solusi yang disarankan di dokumen sendiri di sini :
sumber
Karena ini adalah hasil teratas untuk "penyedia tidak dikenal" di Google sekarang, inilah gotcha lain. Saat melakukan pengujian unit dengan Jasmine, pastikan Anda memiliki pernyataan ini dalam
beforeEach()
fungsi Anda :Kalau tidak, Anda akan mendapatkan kesalahan yang sama dalam tes Anda.
sumber
Namun kasus lain di mana kesalahan ini akan terjadi, jika layanan Anda didefinisikan dalam file javascript terpisah, pastikan Anda referensi itu! Ya, saya tahu, kesalahan pemula.
sumber
Saya lupa menyuntikkan file yang menampung layanan saya sama sekali. Ingatlah untuk melakukan ini ketika menginisialisasi modul aplikasi Anda:
sumber
Dalam kasus saya, saya menggunakan fungsi anonim sebagai pembungkus untuk modul sudut, seperti ini:
Setelah menutup tanda kurung, saya lupa memanggil fungsi anonim dengan membuka dan menutup tanda kurung lagi seperti di atas.
sumber
Bagi saya masalahnya adalah pemuatan malas; Saya memuat pengontrol dan layanan saya terlambat, sehingga tidak tersedia saat memuat halaman (dan inisialisasi Angular). Saya melakukan ini dengan tag ui-if, tapi itu tidak relevan. Solusinya adalah memuat layanan dengan memuat halaman sudah.
sumber
Berikut ini adalah skenario lain yang memungkinkan Anda melihat kesalahan ini:
Jika Anda menggunakan Sublime Text 2 dan plugin angular, itu akan menghasilkan bertopik seperti ini
perhatikan kosong '' sebagai elemen pertama dari array setelah string 'utilFactory'. Jika Anda tidak memiliki dependensi, hapus itu jadi seperti ini:
sumber
Karena pertanyaan ini adalah hasil teratas google, saya akan menambahkan hal lain yang mungkin ke daftar.
Jika modul yang Anda gunakan memiliki kegagalan pada bungkus injeksi ketergantungan, itu akan memberikan hasil yang sama. Misalnya modul salin & tempel dari internet dapat mengandalkan underscore.js dan mencoba menyuntikkan '_' di bungkusnya. Jika garis bawah tidak ada di penyedia ketergantungan proyek Anda, ketika pengontrol Anda mencoba merujuk pabrik modul Anda, itu akan mendapatkan 'penyedia tidak dikenal' untuk pabrik Anda di log konsol browser.
sumber
Masalahnya bagi saya adalah bahwa ada beberapa file javascript baru yang saya buat yang mereferensikan layanan namun Chrome hanya melihat versi yang lebih lama. A CTRL + F5 memperbaikinya untuk saya.
sumber
Saya mendapat kesalahan "penyedia tidak dikenal" yang terkait dengan angular-mock (ngMockE2E) ketika mengkompilasi proyek saya dengan Grunt. Masalahnya adalah angular-mock tidak dapat dikecilkan sehingga saya harus menghapusnya dari daftar file yang diperkecil.
sumber
Setelah menangani kesalahan ini juga, saya dapat mendukung daftar jawaban ini dengan kasus saya sendiri.
Ini pada saat yang sama sederhana dan bodoh (mungkin tidak bodoh untuk pemula seperti saya, tapi ya untuk para ahli), referensi skrip ke angular.min.js harus menjadi yang pertama dalam daftar skrip Anda di halaman html.
Ini bekerja:
Ini bukan:
Perhatikan tentang angular.min.js.
Semoga ini bisa membantu siapa pun !! :)
sumber
Masalah saya dengan Yeoman, menggunakan (huruf besar):
File buatan (tidak dikapitalisasi):
tetapi file index.html termasuk (dikapitalisasi):
Semoga ini bisa membantu seseorang.
sumber
Namun kemungkinan lain.
Saya punya
unknown Provider <- <- nameOfMyService
. Kesalahan ini disebabkan oleh sintaks berikut:Angular mencari
''
ketergantungan.sumber
Skenario saya mungkin sedikit tidak jelas tetapi dapat menyebabkan kesalahan yang sama dan seseorang mungkin mengalaminya, jadi:
Ketika menggunakan layanan $ controller untuk instantiate controller baru (yang mengharapkan '$ scope' sebagai argumen pertama yang diinjeksikan), saya mengirimkan lingkup lokal controller baru ke parameter kedua $ controller () function. Ini mengarah ke Angular mencoba memanggil layanan $ scope yang tidak ada ( walaupun, untuk sementara waktu, saya benar-benar berpikir bahwa saya akan sedikit menghapus layanan '$ scope' dari cache Angular ). Solusinya adalah dengan membungkus lingkup lokal di objek lokal:
sumber
Tidak ada jawaban di atas yang bekerja untuk saya, mungkin saya melakukan kesalahan, tetapi sebagai pemula itulah yang kami lakukan.
Saya sedang menginisialisasi controller
div
agar memiliki daftar:Dan kemudian gunakan
$routeProvider
untuk memetakan URL ke pengontrol yang sama. Segera setelah saya melepasng-init
controller bekerja dengan rute.sumber
Saya memiliki masalah yang sama. Saya memperbaikinya menggunakan
$('body').attr("ng-app", 'MyApp')
bukan<body ng-app="MyApp">
untuk meningkatkan.Karena saya melakukannya
untuk persyaratan arsitektur.
sumber
Di aplikasi Ruby on Rails saya, saya telah melakukan hal berikut:
Ini dilakukan di lingkungan 'pengembangan', yang telah memperkecil Angular.js dan memasukkannya ke dalam
/public/assets/application.js
file.Menghapus
/public/assets/*
file memecahkan masalah bagi saya.sumber
Saya menghadapi masalah yang sama hari ini dan masalah sangat kecil
Jika Anda mengamati blok di atas, pada baris pertama Anda akan mengamati saya menyuntikkan $ scope karena kesalahan yang tidak benar. Saya menghapus ketergantungan yang tidak diinginkan untuk menyelesaikan masalah.
sumber
Saya mengalami kesalahan ini setelah saya membuat pabrik baru dan menggunakannya dalam suatu komponen tetapi saya tidak memeriksa spesifikasi komponen itu
sumber
'Gotcha' lain: Saya mendapatkan kesalahan ini dengan menyuntikkan $ timeout, dan butuh beberapa menit untuk menyadari bahwa saya memiliki spasi dalam nilai array. Ini tidak akan berfungsi:
Posting untuk berjaga-jaga jika ada orang lain yang memiliki kesalahan konyol seperti ini.
sumber
Kasus saya mengetik dengan cerdik
fungsi memiliki 'c'!
sumber