programing

각도 js 알 수 없는 공급자

abcjava 2023. 3. 27. 20:51
반응형

각도 js 알 수 없는 공급자

Mongolab의 예를 나만의 REST API에 맞게 "맞춤화"하려고 합니다.이 에러가 발생하고 있습니다만, 무엇을 잘못하고 있는지 잘 모르겠습니다.

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)

이것은 내 컨트롤러입니다.

function ProductListCtrl($scope, Product) {
  $scope.products = Product.query();
}

이 모듈은 다음과 같습니다.

angular.module('productServices', ['ngResource']).
    factory('Product', ['$resource', function($resource){
      var Product = $resource('/api/products/:id', {  }, {
        update: { method: 'PUT' }
      });

      return Product;
    }]);

당신의 코드는 좋아 보입니다.실제로 (콜 자체를 제외하고) 복사하여 샘플 jsFiddle에 붙여넣으면 동작합니다.http://jsfiddle.net/VGaWD/

더 완벽한 예를 보지 않고 무슨 일이 일어나고 있는지 말하기는 어렵지만, 나는 위의 jsFiddle이 도움이 되기를 바란다.내가 의심하는 것은 당신이 'product Services' 모듈로 앱을 초기화하지 않았다는 것입니다.같은 에러가 발생합니다.다른 jsFiddle에서도 확인할 수 있습니다.http://jsfiddle.net/a69nX/1/

Angular를 사용할 계획인 경우JS와 MongoLab은 $resource와 MongoLab에 기존 어댑터를 사용하는 것을 추천합니다.https://github.com/pkozlowski-opensource/angularjs-mongolab MongoLab과 함께 작업하면 많은 어려움을 덜 수 있습니다. http://jsfiddle.net/pkozlowski_opensource/DP4Rh/ 면책사항!이 어댑터를 유지하고 있습니다(각도에 따라 작성).JS의 예) 그래서 저는 분명히 여기에 편중되어 있습니다.

공장 정의에 잘못된 파라미터를 전달했기 때문에 오류가 발생하였습니다.나는 다음을 가지고 있었다.

myModule.factory('myService', function($scope, $http)...

이 장치를 제거했을 때 작동했습니다.$scope를 다음과 했습니다.

myModule.factory('myService', function( $http)...

$scope: , "사용방법:

myModule.factory('myService', function($rootScope, $http)...

나도 비슷한 문제가 있었어.에러는 질문에서도 같은 내용으로 pkozlowski.opensource와 Ben G의 답변으로 해결하려고 했습니다.둘 다 정답이고 좋은 답변입니다.

같은 오류로 인해 문제가 확실히 달라졌습니다.

내 HTML-Code에서는 이렇게 초기화를 했는데...

<html ng-app>

조금 더 내려가서 이렇게 하려고 했어요.

<div id="cartView" ng-app="myApp" ng-controller="CartCtrl">

내가 첫 번째 걸 없앴는데...그리고 효과가 있었어ng-app을 두 번 이상 초기화할 수 없습니다.그럴 만도 하지

저는 첫 번째 'ng-app'을 잊어버리고 완전히 좌절했습니다.어쩌면 이게 언젠가 누군가에게 도움이 될 지도...

★★★★★★★★★★★★★★★★★★★★★★★★.app.js에는 그것이 의존하는 서비스가 포함됩니다.를 들면, '먹다'와 같이요.

/* App Module */
angular.module('myApp', ['productServices']). 
.....

pkozlowski의 답변은 맞지만, 만약의 경우에 대비하여 같은 모듈을 두 번 실수로 작성한 후 동일한 오류가 발생했습니다. 두 번째 정의는 첫 번째 모듈의 공급자를 덮어쓰는 것입니다.

모듈을 작성하려면

angular.module('MyService'...
).factory(...);

같은 파일에서 조금 더 아래쪽으로 이동합니다.

angular.module('MyService'...
).value('version','0.1');

올바른 방법은 다음과 같습니다.

angular.module('MyService'...
).factory(...).value('version','0.1');

공급자를 예를 들어, 새로운 공급자를 했습니다. ★★★★★★★★★★★★★★★★★,xyz

angular.module('test')
.provider('xyz', function () {
    ....
});

프로바이더를 「」, 「」를 삽입할 필요가 .Provideradded > string string string string> -- >xyz becomes가 되다xyzProvider.

예:

angular.module('App', ['test'])
.config(function (xyzProvider) {
     // do something with xyzProvider....
});

'Provider' 문자열 없이 위의 공급자를 삽입하면 OP에서도 유사한 오류가 발생합니다.

JS파일을 종료하고 공장 기능을 종료할 때 가지고 있던

});

대신

}());

추적하는데 너무 오래 걸렸어요명령어 내에서 컨트롤러를 최소화하고 있는지 확인하십시오.

.directive('my_directive', ['injected_item', function (injected_item){

  return {

    controller: ['DO_IT_HERE_TOO', function(DO_IT_HERE_TOO){

    }]
  }
}

도움이 되었으면 좋겠다

여기에 제 경험을 더하기 위해 모듈 설정 기능 중 하나에 서비스를 삽입하려고 했습니다.결국 찾은 문서의 다음 단락은 이 기능이 작동하지 않는 이유를 설명합니다.

애플리케이션 부트스트랩 중에 Angular가 모든 서비스 생성을 해제하기 전에 모든 공급자를 구성하고 인스턴스화합니다.이것을 애플리케이션 라이프 사이클의 설정 단계라고 부릅니다.이 단계에서는 서비스가 아직 생성되지 않았기 때문에 액세스할 수 없습니다.

즉, 공급자를 module.config(...) 함수에 주입할 수는 있지만 서비스를 주입할 수는 없습니다.그러기 위해서는 module.run(...)까지 기다리거나 module.config에 주입할 수 있는 공급자를 노출해야 합니다.

이 에러는 앵귤러 앱의 미니 버전을 실행했기 때문에 발생했습니다.각진 문서는 이 문제를 해결할 방법을 제안합니다.다음은 문제를 설명하는 관련 인용문입니다.여기서 문서 자체에서 권장 해결책을 찾을 수 있습니다.

최소화에 관한 주의: Angular는 컨트롤러의 종속성을 인수 이름에서 컨트롤러의 컨스트럭터 함수로 유도하기 때문에 PhoneListCtrl 컨트롤러의 JavaScript 코드를 최소화하면 모든 함수 인수가 최소화되어 의존성 인젝터가 서비스를 올바르게 식별할 수 없게 됩니다.

Angularjs Unknown Provider, Angularjs Unknown Provider, Angularjs Unknown Provider.Jasmine을 이 를 Jasmine에 .beforeEach()★★★★

module('moduleName'); 

그렇지 않으면 테스트에서도 동일한 오류가 발생합니다.

그러나 이 오류가 발생하는 다른 경우, 서비스 중인 경우 별도의 javascript 파일에 정의되어 있으므로 참조하시기 바랍니다.그래, 나도 알아, 신참 실수.

내 서비스가 포함된 파일을 삽입하는 것을 깜빡하고 있었습니다.앱 모듈을 초기화할 때 다음 작업을 수행해야 합니다.

angular.module('myApp', ['myApp.services', ... ]);

내 경우 다음과 같이 앵글모듈의 래퍼로서 익명함수는 다음과 같습니다.

(function () {
var app = angular.module('myModule', []);
...
})();

괄호를 닫은 후 위와 같이 괄호를 열었다 닫았다를 반복하여 어나니머스 함수를 호출하는 것을 잊었습니다.

컨트롤러와 서비스를 늦게 로드하여 페이지 로드(및 각도 초기화) 시 사용할 수 없었던 것이 문제였습니다.ui-if 태그를 사용하여 이 작업을 수행했지만, 그것은 관련이 없습니다.해결 방법은 이미 페이지 로드를 통해 서비스를 로드하는 것이었습니다.

다음은 이 오류가 발생할 수 있는 다른 시나리오입니다.

Sublime Text 2와 angular 플러그인을 사용하면 다음과 같은 stub이 생성됩니다.

angular.module('utils', [])
.factory('utilFactory', [''
    function() {
        return {

        }
    }
]);

utilFactory 문자열 뒤에 있는 배열의 첫 번째 요소로 빈 ' '가 표시됩니다.의존관계가 없는 경우는, 다음과 같이 삭제해 주세요.

angular.module('utils', [])
.factory('utilFactory', [
    function() {
        return {

        }
    }
]);

이 질문은 구글의 상위 결과이기 때문에, 가능한 것을 리스트에 추가하겠습니다.

사용하고 있는 모듈에 의존성 주입 래퍼에 장애가 있는 경우 동일한 결과를 얻을 수 있습니다.예를 들어 인터넷에서 모듈을 복사앤페이스트하여 언더스코어.js에 의존하여 di 래퍼에 '_'를 삽입하려고 할 수 있습니다.프로젝트 의존관계 프로바이더에 언더스코어가 없는 경우 컨트롤러가 모듈의 팩토리를 참조하려고 하면 브라우저 콘솔로그에 해당 팩토리의 '알 수 없는 프로바이더'가 표시됩니다.

제가 만든 javascript 파일 중에 서비스를 참조하는 파일이 몇 개 있었는데 Chrome은 이전 버전만 보였어요.Ctrl + F5로 수정했습니다.

Grunt와 함께 프로젝트를 컴파일할 때 angular-mocks(ngMockE2E)와 관련된 "알 수 없는 공급자" 오류가 발생했습니다.문제는 앵귤러 모크를 최소화할 수 없기 때문에 최소 파일 목록에서 삭제해야 한다는 것이었습니다.

이 에러에 대해서도 대응한 후, 이 회답 리스트를 제 케이스로 서포트할 수 있습니다.

심플함과 멍청함을 동시에 가지고 있습니다(저와 같은 초보자라면 바보가 아닐 수도 있지만 전문가라면 그렇습니다), angular.min.js에 대한 스크립트 참조는 html 페이지에 있는 스크립트 목록 중 첫 번째 것이어야 합니다.

이 방법은 다음과 같습니다.

<script src="Scripts/angular.min.js"></script>
<script src="MyScripts/MyCartController.js"></script>
<script src="MyScripts/MyShoppingModule.js"></script>

이것은 아닙니다.

<script src="MyScripts/MyCartController.js"></script>
<script src="MyScripts/MyShoppingModule.js"></script>
<script src="Scripts/angular.min.js"></script>

angular.min.js에 주목해 주세요.

누구라도 도움이 되었으면 좋겠다!!:)

문제는 Yooman이 (대문자로)를 사용하는 것이었습니다.

yo angular:factory Test

만든 파일(캐피털화되지 않음):

app/scripts/services/test.js

그러나 index.displaces 파일이 포함되어 있습니다(대문자로 표시).

<script src="scripts/services/Test.js"></script>

이게 도움이 됐으면 좋겠네요.

또 다른 가능성이 있습니다.

나는 가지고 있었다unknown Provider <- <- nameOfMyService이 에러는, 다음의 구문에 의해서 발생했습니다.

module.factory(['', function() { ... }]);

Angular가 찾고 있던 건''의존.

내 시나리오는 조금 불분명할 수 있지만, 같은 에러가 발생할 수 있고, 다른 사람이 그것을 경험할 수 있습니다.

$controller 서비스를 사용하여 새로운 컨트롤러를 인스턴스화할 때('$scope'를 첫 번째 인수로 예상) 새 컨트롤러의 로컬 스코프를 $controller() 함수의 두 번째 파라미터로 전달하고 있었습니다.이로 인해 Angular는 존재하지 않는 $scope 서비스를 호출하려고 했습니다(그러나 한동안은 Angular의 캐시에서 $scope 서비스를 삭제하는 방법을 생각해 보았습니다).해결책은 로컬스코프를 로컬오브젝트로 랩하는 것입니다.

// Bad:
$controller('myController', newScope);

// Good:
$controller('myController, {$scope: newScope});

위의 답변 중 어느 것도 제게는 효과가 없었습니다.아마 제가 완전히 잘못하고 있었던 것 같습니다만, 초보자로서 저희는 그렇게 하고 있습니다.

컨트롤러 초기화 중div목록을 작성하려면:

 <div ng-controller="CategoryController" ng-init="initialize()">

그리고 나서$routeProviderURL을 같은 컨트롤러에 매핑합니다.제가 이걸 제거하자마자ng-init컨트롤러가 루트를 조작했습니다.

저도 같은 문제가 있었어요.나는 그것을 사용하여 고쳤다$('body').attr("ng-app", 'MyApp')대신<body ng-app="MyApp">부스트랩을 하다.

했으니까

angular.element(document).ready(function () {        
    angular.bootstrap(document, [App.Config.Settings.AppName]);
})

아키텍처 요건을 충족합니다.

Ruby on Rails 앱에서 다음을 수행했습니다.

rake assets:precompile

이는 Angular.js를 최소화하고 이를 '개발' 환경에 포함시킨 것입니다./public/assets/application.js파일.

의 삭제/public/assets/*파일이 문제를 해결해주었습니다.

저도 오늘 비슷한 문제에 직면했는데 정말 작은 문제였어요.

 app.directive('removeFriend', function($scope) {
return {
    restrict: 'E',
    templateUrl: 'removeFriend.html',
    controller: function($scope) {
        $scope.removing = false;
        $scope.startRemove = function() {
            $scope.removing = true;
        }
        $scope.cancelRemove = function() {
            $scope.removing = false;
        }
        $scope.removeFriend = function(friend) {
            var idx = $scope.user.friends.indexOf(friend)
            if (idx > -1) {
                $scope.user.friends.splice(idx, 1);
            }
        }
    }
}
});

위의 블록을 보면 첫 번째 줄에 실수로 $scope를 삽입한 것을 알 수 있는데, 이는 잘못된 것입니다.나는 문제를 해결하기 위해 그 불필요한 의존을 제거했다.

 app.directive('removeFriend', function() {
return {
    restrict: 'E',
    templateUrl: 'removeFriend.html',
    controller: function($scope) {
        $scope.removing = false;
        $scope.startRemove = function() {
            $scope.removing = true;
        }
        $scope.cancelRemove = function() {
            $scope.removing = false;
        }
        $scope.removeFriend = function(friend) {
            var idx = $scope.user.friends.indexOf(friend)
            if (idx > -1) {
                $scope.user.friends.splice(idx, 1);
            }
        }
    }
}
});

새로운 공장을 만들어 컴포넌트 내에서 사용한 후 이 오류가 발생했지만 해당 컴포넌트의 사양을 확인하지 않았습니다.

따라서 테스트 파일의 실패가

넣어야 요.beforeEach(module('YouNewServiceModule'));

또 다른 '잡혔어':$timeout을 삽입하는 동안 오류가 발생했는데 어레이 값에 공백이 있다는 것을 깨닫기까지 몇 분이 걸렸습니다.이것은 동작하지 않습니다.

angular.module('myapp',[].
  controller('myCtrl', ['$scope', '$timeout ', 
    function ($scope, $timeout){
      //controller logic
    }
  ]);

혹시나 이런 바보 같은 오류가 있을 경우를 대비해서 글을 올립니다.

내 케이스는 타이핑이 서툴러서

myApp.factory('Notify',funtion(){

함수에 'c'가 있습니다!

언급URL : https://stackoverflow.com/questions/12339272/angular-js-unknown-provider

반응형