在angularJs控制器和TypeScript控制器中使用TypeScript服务

时间:2018-04-18 22:39:05

标签: angularjs typescript

使用“export”一词将我的AngularJS服务转换为TypeScript后,可以在TypeScript控制器中导入它...

,但我怎么能用旧控制器注入它?

详细解释,我正在将我的控制器重写为Typescript上的服务,以便为将来的angularjs迁移到angular 2.x 做好准备, 这是使用TypeScript的服务“equipmentAreaStorageT”...

     <reference path="../../Scripts/typings/angularjs/angular.d.ts" /> 
     import { UrlService } from '../../Scripts/app/services/urlService'; 
     export class EquipmentAreaStorageT { 

    keyPrefix = "";
    api = "";
    index =""; 
    constructor(private isl3UrlService: UrlService) {

        var _this = this; 
        this.keyPrefix = "EquipmentAreaStorageT";
        this.api = "api/equipmentAreaApi/";
        this.index = "EquipmentArea";        
    }
    getIndexUrl() {
        return this.isl3UrlService.getPath + this.index;
    }    
}
angular.module('main').service('equipmentAreaStorageT', EquipmentAreaStorageT);

我知道使用Import关键字应足以将其注入TypeScriptController

import { EquipmentAreaStorageT } from '../EquipmentArea/EquipmentAreaStorageT'; 
export class EquipmentAreaControllerT {
    $inject = ["$scope"];

    entity = {};
    isOpen = false; 
    gridOptions = {}; 
    isl3SelectionService = {};
    isl3DialogService = {}; 
    constructor($scope,private isl3EquipmentAreaStorage: EquipmentAreaStorageT) {    
        var _this = this;

        var ctrl = $controller("baseEditOnGridController", { $scope: this, storage: isl3EquipmentAreaStorage});        

        ctrl.loadRecords();
    }
}
angular.module('main').controller('EquipmentAreaControllerT', EquipmentAreaControllerT);

但我不想将我的所有控制器转换为Typescript ..目前还没有,所以我如何在旧的.js控制器中使用这个新的TypeScript服务。我试过这个例子..

appRoot.controller("EquipmentAreaController", [
    "$scope", "equipmentAreaStorageT"
    function ($scope, equipmentAreaStorageT) {

        $scope.entity = {};
        $scope.isOpen = false;

        $controller("baseEditOnGridController", { $scope: $scope, storage: equipmentAreaStorageT});

        $scope.loadRecords();

    }
]);

但我总是得到这个错误。 Object.defineProperty(exports,“__ myModule”,{value:true});

我正在使用visual studio并添加了使用typescript的类型。

1 个答案:

答案 0 :(得分:0)

如果只是在控制器中导入服务-它与注入不一样。您只能将导入的值用于打字稿键入。

您应该正确设置您的构建器(webpack,gulp-无论使用什么)以使用打字稿。一切仍将与javascript相同。您仍然需要在某个模块中注册服务并在另一个位置注入。 如果您使用的是AngularJs 1.5+,请考虑使用组件。还要看看ng-annotate(或者是通天塔plugin来简化注入)