我有一个角度(1.4.3)应用程序和一个gulp管道,它使用ngAnnotate和uglify来最小化它。
我有一个服务的Provider,它有一个打开(ui.bootstrap)模式的函数:
angular.module('myapp', ['ui.bootstrap'])
.provider('AuthUser', function(){
return {
//stuff
$get: function($q, MyConstant, $modal){
return {
showLoginModal : showLoginModal
}
function showLoginModal() {
$modal.open({
templateUrl: '/path/to.html'
//stuff
});
}
}
}
}
这在开发模式下工作正常(非最小化),并且在节点开发服务器上运行时,最小化的代码在我的本地(Windows)计算机上运行良好。但是,当我将代码拉入我的AWS(ubuntu)实例gulp build
并静态提供服务时,我崩溃了$injector:unpr: Unknown provider: Provider <-
错误消息本身(以及我给出的corresponding error reference link)并没有告诉我缺少哪个提供程序,它们只有一个空白区域。在跟踪之后,我可以看到它在$modal.open()
的调用中发生,因此假设缺少的依赖是$modal
,但无法找出原因。
MyConstant
被注入并在服务的其他地方使用而没有问题,因此我认为这不是最小化问题,但是对于记录,这里是如何最小化:
angular.module("civ.core").provider("AuthUser", function() {
var e = this;
return e.token = null ,
e.user = null ,
{
initialize: function(t) {
e.token = t.token,
e.user = t.user
},
$get: ["$http", "$q", "$localStorage", "$modal", "DEVELOPMENT", "PRODUCTION", function(t, i, n, o, s, a) {
function l(e, i) {
t.defaults.headers.common.token = "Token " + e,
t.defaults.headers.common.user = i
}
function r() {
console.log("instantiating"),
console.log(e),
x.user = e.user,
x.authToken = e.token,
x.user.anonymous && (x.user.votes = {},
x.user.pinnedTags = [])
}
function c(e) {
return o.open({
templateUrl: "app/core/templates/login.html",
//stuff...
那就是说,这是我第一次尝试缩小和吞咽 - 所以帮助我......
答案 0 :(得分:0)
您当然需要将$modal
服务注入您自己的服务:
angular.module('myapp', ['ui.boostrap'])
.service('AuthUser', ['$modal',
function ($modal) {
//stuff with your modal
}])
此外,除非您有令人信服的理由,否则我建议使用有角度的service
或factory
缩写代替provider
。
来自the docs:
提供者配方是核心配方类型,所有其他配方类型都只是语法糖。它是最具功能性的最详细的配方,但对于大多数服务而言,它是过度的。
提供程序配方在语法上定义为实现$ get方法的自定义类型...如果定义了Factory配方,则会自动创建一个将$ get方法设置为工厂函数的空Provider类型。