내 dev 컴퓨터에서 잘 실행되는 매우 간단한 Angular 응용 프로그램이 있지만 배포 후이 오류 메시지 (브라우저 콘솔에서)와 함께 실패합니다.
Uncaught Error: [$injector:unpr] http://errors.angularjs.org/undefined/$injector/unpr?p0=tProvider%20%3C-%20t%20%3C-%20%24http%20%3C-%20%24compile
그 외에 다른 메시지는 없습니다. 페이지가 처음로드 될 때 발생합니다.
ASP.NET MVC5, Angular 1.2RC3을 실행하고 있으며 git을 통해 Azure로 푸시하고 있습니다.
인터넷 검색은 흥미로운 것을 찾지 못했습니다.
어떤 제안?
편집하다:
TypeScript를 사용하고 있으며 $inject
변수로 내 종속성을 정의 합니다. 예 :
export class DashboardCtrl {
public static $inject = [
'$scope',
'$location',
'dashboardStorage'
];
constructor(
private $scope: IDashboardScope,
private $location: ng.ILocationService,
private storage: IDashboardStorage) {
}
}
나는 그것이 최소화 중에 발생하는 지역 변수 이름 변경 문제를 해결해야하거나이 오류를 일으킬 수 있다고 생각합니다.
즉, BundleTable.EnableOptimizations = true
개발자 컴퓨터에서 설정할 때 재현 할 수 있으므로 축소 프로세스와 분명히 관련이 있습니다.
답변
링크를 따라 가면 $ injector가 종속성을 해결할 수 없기 때문에 오류가 발생한다고 알려줍니다. 이것은 javascript가 축소 / 추상 / 생산을 위해 무엇을하든간에 angular의 일반적인 문제입니다.
문제는 컨트롤러가있는 경우입니다.
angular.module("MyApp").controller("MyCtrl", function($scope, $q) {
// your code
})
축소를 변경 $scope
및 $q
확률 변수로는 주입하기 위해 어떤 각도 말하지 않습니다. 해결책은 다음과 같이 종속성을 선언하는 것입니다.
angular.module("MyApp")
.controller("MyCtrl", ["$scope", "$q", function($scope, $q) {
// your code
}])
그러면 문제가 해결 될 것입니다.
다시 말하지만, 내가 말한 모든 것은 오류 메시지가 제공하는 링크에 있습니다.
답변
동일한 문제가 발생했지만 컨트롤러 정의가 위와 약간 다릅니다. 다음과 같이 정의 된 컨트롤러의 경우 :
function MyController($scope, $http) {
// ...
}
컨트롤러가 인스턴스화 될 때 삽입 할 개체를 나타내는 선언 뒤에 줄을 추가하면됩니다.
function MyController($scope, $http) {
// ...
}
MyController.$inject = ['$scope', '$http'];
이것은 축소에 안전합니다.
답변
이 문제는 컨트롤러 또는 지시문이 종속성 및 함수의 배열로 지정되지 않은 경우 발생합니다. 예를 들면
angular.module("appName").directive('directiveName', function () {
return {
restrict: 'AE',
templateUrl: 'calender.html',
controller: function ($scope) {
$scope.selectThisOption = function () {
// some code
};
}
};
});
축소 될 때 컨트롤러 함수에 전달 된 ‘$ scope’는 단일 문자 변수 이름으로 대체됩니다. 이것은 의존성에 대한 단서가없는 각도를 렌더링합니다. 이를 방지하려면 종속성 이름을 함수와 함께 배열로 전달하십시오.
angular.module("appName").directive('directiveName', function () {
return {
restrict: 'AE',
templateUrl: 'calender.html'
controller: ['$scope', function ($scope) {
$scope.selectThisOption = function () {
// some code
};
}]
};
});
답변
각도 app \ resources \ directives 및 기타 항목에 대한 파일을 분리 한 경우 다음과 같이 각도 앱 번들의 축소를 비활성화 할 수 있습니다 (번들 구성 파일에서 ScriptBundle () 대신 new Bundle () 사용).
bundles.Add(
new Bundle("~/bundles/angular/SomeBundleName").Include(
"~/Content/js/angular/Pages/Web/MainPage/angularApi.js",
"~/Content/js/angular/Pages/Web/MainPage/angularApp.js",
"~/Content/js/angular/Pages/Web/MainPage/angularCtrl.js"));
그리고 각도 앱은 수정되지 않은 번들로 표시됩니다.
답변
각도 app \ resources \ directives 및 기타 항목에 대한 파일을 분리 한 경우 다음과 같이 각도 앱 번들의 축소를 비활성화 할 수 있습니다 (번들 구성 파일에서 ScriptBundle () 대신 new Bundle () 사용).
답변
컨트롤러 기능에 $ http, $ scope 서비스를 추가하십시오. 때때로 누락 된 경우 이러한 오류가 발생합니다.
답변
나는 같은 문제가 있었지만 문제는 다른 문제였습니다. 나는 서비스를 만들고 $ scope를 매개 변수로 전달하려고했습니다.
해당 링크의 문서에 나와 있듯이이 오류가 발생하는 또 다른 방법입니다.
컨트롤러 나 지시어가 아닌 서비스 (예 : 서비스)에 범위 개체를 삽입하려고하면 알 수없는 공급자 : $ scopeProvider <-$ scope 오류도 발생합니다. 이는 컨트롤러를 서비스로 실수로 등록한 경우에 발생할 수 있습니다. 예 :
angular.module('myModule', [])
.service('MyController', ['$scope', function($scope) {
// This controller throws an unknown provider error because
// a scope object cannot be injected into a service.
}]);