打字稿缩小中断 Angular UI 模态
TypeScript minified breaks Angular UI Modal
我有一个包含大量 Angular 代码的 MVC 应用程序。我有一个创建 Angular UI 模式的 Angular 服务。相关代码是:
export class ConfirmRenderingOfLargeResultsModalService {
static $inject = ["$uibModal"];
constructor(private $uibModal: any) {
}
public open(options: LargeResultSetModalOptions): ng.IPromise<LargeResultsModalAction> {
var modalInstance = this.$uibModal.open(
{
templateUrl: "myTemplate.html",
controller: "ConfirmRenderingOfLargeResultsModalController",
controllerAs: "confirmRenderingOfLargeResultsModalController",
backdrop: "static",
resolve: {
modalOptions: () => options
}
});
return modalInstance.result.then((action: LargeResultsModalAction) => {
return action;
});
}
}
angular.module("My.Module").service("Services.ConfirmRenderingOfLargeResultsModalService", Services.ConfirmRenderingOfLargeResultsModalService);
控制器(代码段)是:
export class ConfirmRenderingOfLargeResultsModalController {
public confirmRenderingOfLargeResultsModalController: ConfirmRenderingOfLargeResultsModalController = this;
//static $inject = ["$uibModalInstance"];
constructor(private $uibModalInstance: any, private modalOptions: LargeResultSetModalOptions) {
}
public ok(): void {
this.$uibModalInstance.close(LargeResultsModalAction.Continue);
}
// more methods not shown
}
angular.module("My.Module").controller("Services.ConfirmRenderingOfLargeResultsModalController", Services.ConfirmRenderingOfLargeResultsModalController);
现在,在我的开发环境中,这工作正常。模式弹出,控制器正确注入了 $uibModalInstance 和 modalOptions 参数。在生产环境中,启用捆绑后,它会崩溃——因为什么都没有发生。也没有控制台错误。
如果我取消注释控制器上的静态注入行,那么它会在开发和生产中中断,模态弹出但不能正常工作,因为可能它不是由服务实例化的模态实例,因为 modalOptions 参数仍然存在未定义。
我的问题是,如何缩小此代码并仍然注入正确的 $uibModalInstance 实例?希望我遗漏了一些非常简单的东西,今天拉的所有头发都只是一种沮丧的练习。
我建议您使用所谓的安全或内联依赖注入注解。
例如在您的控制器中:
angular.module("My.Module")
.controller("Services.ConfirmRenderingOfLargeResultsModalController", ["uibModalInstance", "modalOptions", Services.ConfirmRenderingOfLargeResultsModalController]);
这将在您缩小代码时保留依赖项名称。
我有一个包含大量 Angular 代码的 MVC 应用程序。我有一个创建 Angular UI 模式的 Angular 服务。相关代码是:
export class ConfirmRenderingOfLargeResultsModalService {
static $inject = ["$uibModal"];
constructor(private $uibModal: any) {
}
public open(options: LargeResultSetModalOptions): ng.IPromise<LargeResultsModalAction> {
var modalInstance = this.$uibModal.open(
{
templateUrl: "myTemplate.html",
controller: "ConfirmRenderingOfLargeResultsModalController",
controllerAs: "confirmRenderingOfLargeResultsModalController",
backdrop: "static",
resolve: {
modalOptions: () => options
}
});
return modalInstance.result.then((action: LargeResultsModalAction) => {
return action;
});
}
}
angular.module("My.Module").service("Services.ConfirmRenderingOfLargeResultsModalService", Services.ConfirmRenderingOfLargeResultsModalService);
控制器(代码段)是:
export class ConfirmRenderingOfLargeResultsModalController {
public confirmRenderingOfLargeResultsModalController: ConfirmRenderingOfLargeResultsModalController = this;
//static $inject = ["$uibModalInstance"];
constructor(private $uibModalInstance: any, private modalOptions: LargeResultSetModalOptions) {
}
public ok(): void {
this.$uibModalInstance.close(LargeResultsModalAction.Continue);
}
// more methods not shown
}
angular.module("My.Module").controller("Services.ConfirmRenderingOfLargeResultsModalController", Services.ConfirmRenderingOfLargeResultsModalController);
现在,在我的开发环境中,这工作正常。模式弹出,控制器正确注入了 $uibModalInstance 和 modalOptions 参数。在生产环境中,启用捆绑后,它会崩溃——因为什么都没有发生。也没有控制台错误。
如果我取消注释控制器上的静态注入行,那么它会在开发和生产中中断,模态弹出但不能正常工作,因为可能它不是由服务实例化的模态实例,因为 modalOptions 参数仍然存在未定义。
我的问题是,如何缩小此代码并仍然注入正确的 $uibModalInstance 实例?希望我遗漏了一些非常简单的东西,今天拉的所有头发都只是一种沮丧的练习。
我建议您使用所谓的安全或内联依赖注入注解。
例如在您的控制器中:
angular.module("My.Module")
.controller("Services.ConfirmRenderingOfLargeResultsModalController", ["uibModalInstance", "modalOptions", Services.ConfirmRenderingOfLargeResultsModalController]);
这将在您缩小代码时保留依赖项名称。