问题 具有依赖注入和缩小的类型脚本中的角度服务


我正试图让我的头围绕着角度。我目前正在寻找服务我也在使用打字稿代码。

现在,从网上的样本我看到人们使用类似下面的东西来获取打字稿中的服务。

class Service
{
    constructor( private $http: ng.IHttpService )
    {
    }

    public MyMethod()
    {
        this.$http.get( "/" )
            .success( null )
            .error( null );
    }
}

现在,如果这被缩小,我会失败 $http 从构造函数和角度需要变量名称。所以我查了一下,发现我可以使用$ inject而不是构造函数,但这也会得到同样的缩小问题。

人们如何在打字稿背景下处理缩小和角度?我正在努力找到一些关于如何处理它的可靠文档。对我来说,在现代api中遇到这些问题似乎很奇怪,所以我必须在某处遗漏某些东西。


2161
2017-10-09 10:12


起源

您可以在uglifyid之前使用“ngAnnotate”模块进行gulp,这样可以防止在角度中丢失依赖关系。例如:gulp.src(paths.ts).pipe(ts(ts.createProject('tsconfig.json')))。pipe(concat('app.min.js'))。pipe(ngAnnotate({remove: true,add:true,single_quotes:true}))。pipe(uglify())。pipe(gulp.dest('www / js /')) - ekussberg


答案:


只是使用 $inject 句法。例如:

class Service
{
    static $inject = ['$http'];    
    constructor( private $http: ng.IHttpService )
    {
    }

    public MyMethod()
    {
        this.$http.get( "/" )
            .success( null )
            .error( null );
    }
}

PS:我做了一个关于这个主题的详细视频: http://www.youtube.com/watch?v=WdtVn_8K17E&hd=1


16
2017-10-09 12:31



但这样,每一个 Service 实例有自己的 $http 参考。在vanilla JavaScript中, angular.factory 方法通常用于在闭包中访问此类依赖项。您打算在Typescript中实现这一目标的最佳做法是什么? - mhelvens
服务是单身人士。只有一个实例 - basarat
Javascript不了解类(或单例),因此AngularJS也不知道。服务可以是任何东西。我一直在提供可实例化的“课程”作为服务多年。 - mhelvens
是的,但AngularJS将进行实例化,并在请求的任何地方注入相同的实例。 - Trevor


目前,官方的TypeScript编译器仍然不会发出可在运行时用于DI系统的接口元数据。关于Emitter可扩展性存在一个问题 这里。 与此同时,我创建了一个AngularJS 1.3应用程序的示例项目(以及发出接口元数据的TS编译器的自定义版本),该应用程序提供装饰器以在应用程序模块中注册组件并在运行时使用类元数据注入依赖项。你可以看看 这里


0
2017-08-08 18:06