1

是否可以将(匿名)从.js文件中的提供者注入到使用打字稿编写的角度模块中?我正在尝试编译在模块定义中失败的打字稿。

故事

我有一个基本的模块,使用打字稿符号中的角度编写。我正在尝试将adalAuthenticationServiceprovider 的定义添加到来自adal-angular.js. 因为提供者不是.d.ts格式我不能用它作为参考。将提供程序转换.d.ts为现在是不可能的。所以我留下了匿名注入选项(如果有这样的选项)。

控制器定义

module Temp.NewModule {
     interface IMainCtl {
         init(): void;
         b1(): void;
         b2(): void;
     }

     class MainCtl implements IMainCtl {
         hello: string;    
         txtb1: string;
         txtb2: string;

         // not sure what effect {private adalService: any} has as it doesn't seem to provide anonymity
         constructor(private $scope, private $log: ng.ILogService, private Api: IApi, private adalService: any) {
             var vm = this;
             this.init();
             // not sure if this actually does anything
             var adalService = adalAuthenticationService;
         }

         public init() {
             this.Api.getDataRx().subscribe((result) => {
                 this.hello = result.data.Name;
             });
         }

         public helloWorld() {
             this.$log.info('I accept your greeting');
         }

         public b1() {
            this.txtb1 = 'Now Button 1 works';
         }

         public b2() {
            // i am trying to call login function of adalService provider
            adalService.login();
         }
     }
     // i am trying to inject adalService provider here
     app.controller('MainCtl', ['$scope','$log','Api', MainCtl, adalService]);
 }

应用定义

module Temp {
    export module NewModule {
        export var serviceRoot: string = NewModule.serviceRoot || "";
        export var templatePath: string;
        export var servicesFramework: any;


        //Initalizes angular app
        $("html").attr("ng-app", "NewModule");
        export var app: ng.IModule = angular.module('NewModule', ['rx', 'ngRoute', 'AdalAngular'])
        .config(['$routeProvider', '$httpProvider', 'adalAuthenticationServiceProvider', function($routeProvider, $httpProvider, adalProvider) {
            adalProvider
            .init ({
                tenant: 'tenant.onmicrosoft.com',
                clientId: 'client_id',
                extraQueryParameter: 'nux=1',
                //cacheLocation: 'localStorage', // enable this for IE, as sessionStorage does not work for localhost.
            },
            $httpProvider
            );
        }]);

    }
}

基本上,我试图绕过编译阶段,adalAuthenticationService将注入作为依赖项,因为adal-angular.js包含在内。所以理论上它应该在页面呈现后被拾取。

4

1 回答 1

2

您的最后一行是错误的,您在控制器之后注入 adalService 。此外,根据 adal 文档,该服务称为 adalAuthenticationService。尝试类似:

 app.controller('MainCtl', ['$scope','$log','Api', 'adalAuthenticationService', MainCtl]);

完全支持匿名注入,您甚至不需要指定任何内容。如果您不指定任何内容,它将被视为任何内容。如果您想利用 IntelliSense,您可以只在adal.d.ts文件中写入您需要的内容,而无需完成所有内容。

在您的 b2 函数中,您忘记了这个:

public b2() {
    // i am trying to call login function of adalService provider
    this.adalService.login();
}
于 2015-04-10T16:34:18.837 回答