Javascript Angularjs、Typescript、Uglify未能实例化模块myApp。。。。未知提供程序:a
我在使用带有angularjs的typescript注入自定义服务时收到此错误。生成的typescript传输JavaScript已通过uglify运行。应用程序在未使用uglify部署时工作Javascript Angularjs、Typescript、Uglify未能实例化模块myApp。。。。未知提供程序:a,javascript,angularjs,dependency-injection,typescript,Javascript,Angularjs,Dependency Injection,Typescript,我在使用带有angularjs的typescript注入自定义服务时收到此错误。生成的typescript传输JavaScript已通过uglify运行。应用程序在未使用uglify部署时工作 Uncaught Error: [$injector:modulerr] Failed to instantiate module myApp due to: Error: [$injector:modulerr] Failed to instantiate module MyModule due to:
Uncaught Error: [$injector:modulerr] Failed to instantiate module myApp due to:
Error: [$injector:modulerr] Failed to instantiate module MyModule due to:
Error: [$injector:unpr] Unknown provider: a
http://errors.angularjs.org/1.2.21/$injector/unpr?...<omitted>...2)
Uncaught错误:[$injector:modulerr]未能实例化模块myApp,原因是:
错误:[$injector:modulerr]未能实例化模块MyModule,原因是:
错误:[$injector:unpr]未知提供程序:a
http://errors.angularjs.org/1.2.21/$injector/unpr?…2)
见普朗克:
我知道它的工作原理是通过改变丑陋的选项来移除马槽,但我想保留马槽
任何帮助都将不胜感激:-)这是因为丑八怪试图注入一个名为a的对象,而没有在$inject寄存器中告诉角度注入器该对象的名称 在丑陋之前使用ngMin 使用(编辑):
这是因为丑八怪试图注入一个名为a的对象,而没有告诉角度注入器$inject寄存器中该对象的名称 在丑陋之前使用ngMin 使用(编辑):
这是因为缩小会替换输入参数名和函数名。那么你的情况呢
var LocationService = (function () {
function LocationService($rootScope) {
$rootScope.foo = 123;
}
LocationService.prototype.log = function (msg) {
console.log(msg);
};
LocationService.$inject = ['$rootScope'];
return LocationService;
})();
缩小到
var b=function(){function a(a){a.foo=123}...
a.$inject=["LocationService"]
所以LocationService被重命名为“b”,您的代码仍然试图注入“LocationService”,这显然是不存在的
一种选择可能是使用ngMin或ngAnnotate(我没有尝试过这些),但我个人的偏好是使用内联数组表示法声明依赖项以避免此问题。原因是缩小了输入参数名和函数名。那么你的情况呢
var LocationService = (function () {
function LocationService($rootScope) {
$rootScope.foo = 123;
}
LocationService.prototype.log = function (msg) {
console.log(msg);
};
LocationService.$inject = ['$rootScope'];
return LocationService;
})();
缩小到
var b=function(){function a(a){a.foo=123}...
a.$inject=["LocationService"]
所以LocationService被重命名为“b”,您的代码仍然试图注入“LocationService”,这显然是不存在的
一种选择可能是使用ngMin或ngAnnotate(我没有尝试过),但我个人的偏好是使用内联数组表示法来声明依赖项以避免此问题。我明确使用$inject来告知服务名称。不确定ng min在这种情况下是否有效您忘了在MyModule中注入$routeProvider:)无法使其工作:-(您是否有可能更改plunker以更正我的尝试:-)好的,使用此命令使其工作<代码>angular.module('MyModule',['ngRoute']).config(['$routeProvider',function($routeProvider){$routeProvider.when('/',{controller:'MainController',templateUrl:'sub.html'});}]).service('LocationService',My module.LocationService.).controller('MainController',My module.MainController')代码>当然,这就是您应该使用ngmin的目的,而不是混合使用$inject和注入数组。我显式地使用$inject来告诉您服务名称。不确定ng min在这种情况下是否有效您忘了在MyModule中注入$routeProvider:)无法使其工作:-(您是否有可能更改plunker以更正我的尝试:-)好的,使用此命令使其工作<代码>angular.module('MyModule',['ngRoute']).config(['$routeProvider',function($routeProvider){$routeProvider.when('/',{controller:'MainController',templateUrl:'sub.html'});}]).service('LocationService',My module.LocationService.).controller('MainController',My module.MainController')代码>当然,这就是您应该使用ngmin的原因,而不是混合使用$inject和injection数组。a.LocationService=b,尽管LocationSercice仍然存在。调试MyModule.LocationService时存在。我不确定如何使用ngMin,ngAnnotate,因为这些控制器是从typescript类自动生成的,这就是为什么我使用$inject=[“LocationService”]。a.LocationService=b,LocationSercice仍然存在。调试MyModule.LocationService时存在。我不确定如何使用ngMin、ngAnnotate,因为这些控制器是从typescript类自动生成的,这就是为什么我使用$inject=[“LocationService”]。