Bilinmeyen sağlayıcı: $ modalProvider <- AngularJS ile $ modal hatası


97

Bootstrap Modal penceresini uygulamaya çalışırken bu hatayı almaya devam ediyorum. Nedeni ne olabilir? Http://angular-ui.github.io/bootstrap/#/modal adresinden her şeyi buraya kopyaladım / yapıştırdım .

Yanıtlar:


197

Bu tür bir hata, bir denetleyici, hizmet vb. İçin bir bağımlılık yazdığınızda ve bu bağımlılığı oluşturmadığınızda veya eklemediğinizde ortaya çıkar.

Bu durumda, $modalbilinen bir hizmet değildir. Açısal önyükleme yaparken ui-bootstrap'i bağımlılık olarak geçirmemişsiniz gibi görünüyor. angular.module('myModule', ['ui.bootstrap']);Ayrıca, güvende olmak için ui-bootstrap'ın (0.6.0) en son sürümünü kullandığınızdan emin olun.

Hata 0.5.0 sürümünde atılır, ancak 0.6.0'a güncelleme $ modal hizmetini kullanılabilir hale getirir. Bu nedenle, 0.6.0 sürümüne güncelleyin ve modülünüzü kaydederken ui.boostrap gerektirdiğinizden emin olun.

Yorumunuzu yanıtlamak: Bu, bir modül bağımlılığını nasıl enjekte edeceğinizdir.

<!-- tell Angular what module we are bootstrapping -->
<html ng-app="myApp" ng-controller="myCtrl">

js:

// create the module, pass in modules it depends on
var app = angular.module('myApp', ['ui.bootstrap']);

// $modal service is now available via the ui.bootstrap module we passed in to our module
app.controller('myCtrl', function($scope, $uibModal) {

});

Güncelleme:

$modalHizmet olarak değiştirilmiştir $uibModal.

$ UibModal kullanma örneği

// create the module, pass in modules it depends on
var app = angular.module('myApp', ['ui.bootstrap']);

// $modal service is now available via the ui.bootstrap module we passed in to our module
app.controller('myCtrl', function($scope, $uibModal) {
    //code here
});

1
Ui.bootstrap ekledim ve hala aynı hatayı alıyorum? kayış yönergesi eklememiz gerekiyor mu? burada söylendiği gibi stackoverflow.com/questions/18783974/…
Ranadheer Reddy

1
@Ranadheer Bağlantınız açısal kayışla ilgili (bu farklı bir kitaplık). Dediğim gibi, ya ui-bootstrap'in eski sürümünü kullanıyorsunuz ya da bağımlılığı eklemediniz. Diğer cevap da alakalı, küçültme yaparken adı geçmeniz gerekiyor, ancak şu anda küçültme ile uğraşıyormuşsunuz gibi görünmüyor.
m59

2
Merhaba @ m59. Sen ayinsin. Ui-bootstrap'in eski sürümünü ekledim. Şimdi yeni sürümü ekledim ve iyi çalışıyor. Çok teşekkür ederim :-)
Ranadheer Reddy

59
$ Modal şimdi $ uibModal okumalıdır. Hangi sürümde değiştiğinden emin değilim, ancak artık çalışmadığını öğrenmeden önce $ modal'ı çalıştırmak için çok uzun süre uğraştım ... $ modalInstance için de aynı, $ uibModalInstance
delp

7
Bunu defalarca değiştirmeleri utanç verici. Önce $ iletişim kutusu, ardından $ modal, şimdi $ uibModal. Sadece hasta. Cevabı güncellediğiniz için teşekkürler. Bana yardımcı oldu.
Steven

54

5 yıl sonra (o sırada sorun bu değildi) :

İsim aralığı değişti - bootstrap-ui'nin daha yeni bir sürümüne yükselttikten sonra bu mesajla karşılaşabilirsiniz ; $uibModal& bakmanız gerekiyor $uibModalInstance.


Teşekkürler. Aynı kodu 2 uygulama için kullandım ama sonuncusu için çalışmıyordu. Bu adlandırma değişikliği, çalışan uygulamayı bozabilir !!!
2016

2
Teşekkürler !, 1.0.0 $ Modal ve $ ModalInstance sürümlerinden itibaren kullanımdan kaldırılmıştır, burada
HaRoLD

$ modalInstance benim için kesinlikle işe yaramadı. $ uibModalInstance did
CommandZ

22

Bugün de karşılaştığım bir sorunla ilgili fazladan bir not: Kaynak kodumun küçültülmesini / çirkinleştirmesini etkinleştirdiğimde benzer bir "Bilinmeyen sağlayıcı: $ aProvider" hatası aldım.

Angular docs eğitiminde belirtildiği gibi (paragraf: "Küçültme Üzerine Bir Not") , bağımlılık ekleme için referansların doğru şekilde tutulduğundan emin olmak için dizi sözdizimini kullanmanız gerekir:

var PhoneListCtrl = ['$scope', '$http', function($scope, $http) { /* constructor body */ }];

İçin Eğik UI Bootstrap Örneğin Bunu bu değiştirmeniz gerekir söz:

var ModalInstanceCtrl = function ($scope, $modalInstance, items) { 
   /* ...example code.. */
}

bu dizi gösterimiyle:

var ModalInstanceCtrl = ['$scope', '$modalInstance', 'items', function ($scope, $modalInstance, items) { 
   /* copy rest of example code here */ 
}];

Bu değişiklikle, küçültülmüş Angular UI modal pencere kodum yeniden işlevsel hale geldi.


Şu anda küçültme ile uğraştığını sanmıyorum, ancak aynı soruna neden olabileceği için bu kayda değer.
m59

Github.com/btford/ngmin'e bir göz atın Küçültmeden önce çalıştırabilirsiniz. Daha sonra kısa biçimi yazmaya devam edebilir ve argüman adlarına göre DI'ye bağlı olarak, ngmin dizi sürümüne genişlediğinden küçültme hala çalışır.
Pascal

11

Sağlayıcı hatası için açık cevap, ui-bootstrap eklenmesi durumunda olduğu gibi bir modül bildirirken eksik bağımlılıktır. Çoğumuzun hesaba katmadığı tek şey, yeni bir sürüme geçerken meydana gelen önemli değişikliklerdir. Evet, aşağıdakiler çalışmalı ve sağlayıcı hatasını artırmamalıdır:

var app = angular.module('app', ['ui.router', 'ngRoute', 'ui.bootstrap']);
app.factory("$svcMessage", ['$modal', svcMessage]);

UI-boostrap'ın yeni bir sürümünü kullandığımız zamanlar hariç. Mod sağlayıcı artık şu şekilde tanımlanmaktadır:

.provider('$uibModal', function() {
    var $modalProvider = {
      options: {
        animation: true,
        backdrop: true, //can also be false or 'static'
        keyboard: true
      },

Buradaki tavsiye, bağımlılıkların dahil edildiğinden emin olduktan ve hala bu hatayı aldığımızda, JS kitaplığının hangi sürümünü kullandığımızı kontrol etmeliyiz. Ayrıca hızlı bir arama yapabilir ve bu sağlayıcının dosyada olup olmadığını görebiliriz.

Bu durumda, mod sağlayıcı artık aşağıdaki gibi olmalıdır:

app.factory("$svcMessage", ['$uibModal', svcMessage]);

Bir not daha. Ui-bootstrap sürümünüzün mevcut angularjs sürümünüzü desteklediğinden emin olun. Değilse, templateProvider gibi başka hatalar alabilirsiniz.

Bilgi için bu bağlantıyı kontrol edin:

http://www.ozkary.com/2016/01/angularjs-unknown-provider-modalprovider.html

Umarım yardımcı olur.


Ve ui bootstrap wiki tüm önek değişikliklerinin listesini içerir.
bjauy

7

Tüm bağımlılıkların dahil olduğunu kontrol ettikten sonra, adını ve adını $modaldeğiştirerek sorunu çözdüm .$uibmodal$modalInstance$uibModalInstance


0
var ModalInstanceCtrl = ['$scope', '$modalInstance',  function ($scope, $modalInstance, items) { 
   /* copy rest of example code here */ 
}];
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.