Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaScript和TypeScript的Angular 1依赖性注入_Javascript_Angularjs_Typescript_Dependency Injection - Fatal编程技术网

使用JavaScript和TypeScript的Angular 1依赖性注入

使用JavaScript和TypeScript的Angular 1依赖性注入,javascript,angularjs,typescript,dependency-injection,Javascript,Angularjs,Typescript,Dependency Injection,我正在试图找出如何在现有的Angular 1.5应用程序中使用TypeScript。我不知道如何注入自定义服务。角度服务和第三方服务工作正常。我需要注入的服务仍然是香草JS服务。在下面的示例中,我需要注入reportService 我得到的错误是getReportById不是函数 class ReportController implements IReportController { static $inject = ['$stateParams', 'reportService']

我正在试图找出如何在现有的Angular 1.5应用程序中使用TypeScript。我不知道如何注入自定义服务。角度服务和第三方服务工作正常。我需要注入的服务仍然是香草JS服务。在下面的示例中,我需要注入reportService

我得到的错误是getReportById不是函数

class ReportController implements IReportController {

    static $inject = ['$stateParams', 'reportService'];


    constructor(private $stateParams: angular.ui.IStateParamsService, private reportService) {

        this.getReport($stateParams.id);
    }

    getReport(id: number): object {
        reportService.getReportById(id)
            .then(function(res) {
                console.log(res)
            });
    }

}
这是服务

angular.module('reportsServiceModule', [])
    .factory('reportsService', [
        '$http',
        reportsService
    ]);

function reportsService(
        $http
) {

    'use strict';

    var service = {};

    service.getReportById = function(reportID) {
        return 'A promise';
    };

    return service;
}
这是个打字错误

您定义了一个报告s服务

.factory(“报告服务”)

但是注入了一个不同的

静态$inject=['$stateparms','reportService']


在AngularJS中,JS和TS开发之间唯一的真正区别在于可以键入单元。这只会影响类型安全

就在这里

interface IReportService {
 getReportById: (someType) => string;
}

...
constructor(
  private $stateParams: angular.ui.IStateParamsService,
  private reportService: IReportService
) {
...
依赖注入没有问题。若你们在角度上有DI问题,你们会从喷油器得到一个错误

这里真正的问题是没有使用严格模式。使用
使用strict
语句,否则错误将显示真正的错误-
reportService
变量未在
getReport
方法中定义

相反,它应该是

getReport(id: number): object {
    this.reportService.getReportById(id)
    ...

什么是reportService?reportService是用JavaScript编写的常规angular 1服务(可以是任何服务)(无类型脚本)。请提供代码。这很重要。对于任何服务,您都可以使用
any
类型,但您不会从TS中受益。你对上面的代码有什么特别的问题吗?添加任何代码都不能解决这个问题,我已经添加了服务结构。确实有输入错误。然而,它是在问题中提出的,而不是在原始代码中提出的。否则会出现DI错误,而不是“getReportById不是函数”。谢谢,我在当天晚些时候发现了这一点,这就是问题所在。我的构造函数也有一个顺序问题,我添加了另一个上面没有显示的变量,没有意识到它也会破坏注入。