알 수없는 공급자 : $ modalProvider <-AngularJS의 $ modal 오류


답변:


197

이러한 종류의 오류는 컨트롤러, 서비스 등에 대한 종속성을 작성하고 해당 종속성을 만들거나 포함하지 않은 경우 발생합니다.

이 경우 $modal에는 알려진 서비스가 아닙니다. 각도를 부트 스트랩 할 때 종속성으로 ui-bootstrap을 전달하지 않은 것 같습니다. angular.module('myModule', ['ui.bootstrap']);또한 안전을 위해 최신 버전의 ui-bootstrap (0.6.0)을 사용하고 있는지 확인하십시오.

버전 0.5.0에서 오류가 발생하지만 0.6.0으로 업데이트하면 $ modal 서비스를 사용할 수 있습니다. 따라서 버전 0.6.0으로 업데이트하고 모듈을 등록 할 때 ui.boostrap이 필요한지 확인하십시오.

귀하의 의견에 회신 : 이것은 모듈 종속성을 주입하는 방법입니다.

<!-- 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) {

});

최신 정보:

$modal서비스에 이름이 변경되었습니다 $uibModal.

$ uibModal을 사용한 예

// 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을 추가했지만 여전히 동일한 오류가 발생합니까? 스트랩 지침을 추가해야합니까? 로 여기 말했다 stackoverflow.com/questions/18783974/...
Ranadheer 레디

1
@Ranadheer 귀하의 링크는 앵귤러 스트랩에 관한 것입니다 (다른 라이브러리입니다). 내가 말했듯이, 이전 버전의 ui-bootstrap을 사용하고 있거나 종속성을 추가하지 않았습니다. 축소 할 때 이름을 전달해야한다는 또 다른 대답도 관련이 있지만 현재 축소를 다루는 것처럼 들리지 않습니다.
m59 2013-09-25

2
@ m59 안녕하세요. 당신은 의례입니다. 이전 버전의 ui-bootstrap을 포함했습니다. 이제 새 버전을 포함했고 잘 작동합니다. 대단히 감사합니다 :-)
Ranadheer Reddy

59
$ modal은 이제 $ uibModal을 읽어야합니다. 어떤 버전에서 변경되었는지 확실하지 않지만 더 이상 작동하지 않는다는 것을 확인하기 전에 $ modal을 작동 시키려고 오랫동안 노력했습니다 ... $ modalInstance의 경우에도 동일합니다. $ uibModalInstance
delp

7
그들이 그것을 계속해서 바꾸는 것은 부끄러운 일입니다. 먼저 $ dialog, 그 다음 $ modal, 이제 $ uibModal. 그냥 아프다. 답변을 업데이트 해 주셔서 감사합니다. 나를 도와 주었다.
Steven

54

5 년 후 (당시에는 문제가되지 않았을 것입니다) :

네임 스페이스가 변경되었습니다. 최신 버전의 bootstrap-ui로 업그레이드 한 후이 메시지가 표시 될 수 있습니다 . $uibModal& 를 참조해야합니다 $uibModalInstance.


감사. 두 응용 프로그램에 동일한 코드를 사용했지만 마지막 응용 프로그램에서는 작동하지 않았습니다. 이 이름 지정 변경으로 인해 작동중인 응용 프로그램이 중단 될 수 있습니다 !!!
Tchaps

2
감사합니다! 버전 1.0.0부터 $ Modal 및 $ ModalInstance가 더 이상 사용되지 않습니다. 여기
HaRoLD

$ modalInstance가 완전히 작동하지 않았습니다. $ uibModalInstance 수행
CommandZ

22

오늘도 경험 한 문제에 대한 추가 참고 사항입니다 . 소스 코드 축소 / 추적켰을 때 유사한 오류 "알 수없는 공급자 : $ aProvider"가 발생했습니다 .

Angular 문서 자습서 (단락 : "축소화에 대한 참고 사항") 에서 언급했듯이 종속성 주입을 위해 참조가 올바르게 유지되는지 확인하려면 배열 구문을 사용해야합니다.

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

를 들어 각도 UI 부트 스트랩 예를 들어 당신이이 교체해야 언급 :

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

이 배열 표기법으로 :

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

그 변경으로 내 축소 된 Angular UI 모달 창 코드가 다시 작동했습니다.


나는 그가 지금 축소를 다루고 있다고 생각하지 않지만 이것은 또한 같은 문제를 일으킬 수 있기 때문에 주목할 가치가 있습니다.
m59 2013-09-25

github.com/btford/ngmin을 살펴보십시오 . 축소하기 전에 실행할 수 있습니다. 그런 다음 ngmin이 배열 버전으로 확장됨에 따라 축소가 계속 작동하는 동안 shortform을 계속 작성하고 인수 이름으로 DI에 의존 할 수 있습니다.
Pascal

11

공급자 오류에 대한 분명한 대답은 ui-bootstrap을 추가하는 경우와 같이 모듈을 선언 할 때 종속성이 누락 된 것입니다. 우리 중 많은 사람들이 설명하지 않는 한 가지는 새 릴리스로 업그레이드 할 때의 주요 변경 사항입니다. 예, 다음이 작동해야하며 공급자 오류가 발생하지 않습니다.

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

새로운 버전의 ui-boostrap을 사용하는 경우는 예외입니다. 이제 모달 공급자는 다음과 같이 정의됩니다.

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

여기서 조언은 종속성이 포함되어 있는지 확인하고 여전히이 오류가 발생하면 사용중인 JS 라이브러리의 버전을 확인해야한다는 것입니다. 또한 빠른 검색을 수행하여 해당 공급자가 파일에 있는지 확인할 수 있습니다.

이 경우 모달 공급자는 이제 다음과 같아야합니다.

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

메모 하나 더. ui-bootstrap 버전이 현재 angularjs 버전을 지원하는지 확인하십시오. 그렇지 않으면 templateProvider와 같은 다른 오류가 발생할 수 있습니다.

자세한 내용은이 링크를 확인하십시오.

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

도움이되기를 바랍니다.


그리고 ui 부트 스트랩 위키 에는 모든 접두사 변경 목록이 포함되어 있습니다.
bjauy

7

나는 모든 의존성 포함했다고 확인 후, 나는 이름을 변경하여 문제를 해결 $modal$uibmodal$modalInstance$uibModalInstance


0
var ModalInstanceCtrl = ['$scope', '$modalInstance',  function ($scope, $modalInstance, items) { 
   /* copy rest of example code here */ 
}];
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.