typescript + angular:带有依赖项错误的工厂

时间:2015-07-17 07:51:18

标签: javascript angularjs typescript

我正在将我的角应用程序迁移到打字稿。我有以下ts代码:

/// <reference path="../../../typings/tsd.d.ts" />

class UiRoutingHelper {
  constructor(public $state: any) {};

  reloadCurrentView() {
    return this.$state.go(this.$state.current.name, this.$state.params, {
      reload: true
    });
  };
}

mp.core.CoreModule.factory('UiRoutingHelper', ['$state', UiRoutingHelper]);

确实正确编译。整个应用程序构建过程也正确构建。但是在运行时我得到以下错误:

Error: [$injector:undef] Provider 'UiRoutingHelper' must return a value from $get factory method.
http://errors.angularjs.org/1.3.15/$injector/undef?p0=UiRoutingHelper
    at angular.js:63
    at Object.enforcedReturnValue [as $get] (angular.js:4058)
    at Object.invoke (angular.js:4203)
    at angular.js:4021
    at getService (angular.js:4162)
    at Object.invoke (angular.js:4194)
    at extend.instance (angular.js:8493)
    at angular.js:7739
    at forEach (angular.js:331)
    at nodeLinkFn (angular.js:7738)

请告诉我我做错了什么。

typings//tsd.d.ts只是一个引导文件,它加载了一些预定义的接口。之前已声明mp.core.CoreModule(可用于TypeScript)。

2 个答案:

答案 0 :(得分:2)

请勿在课程中使用factory。只需使用service即可。代码:

class UiRoutingHelper {
  constructor(public $state: any) {};

  reloadCurrentView() {
    return this.$state.go(this.$state.current.name, this.$state.params, {
      reload: true
    });
  };
}

mp.core.CoreModule.service('UiRoutingHelper', ['$state', UiRoutingHelper]);

以下是有关该主题的视频:https://www.youtube.com/watch?v=Yis8m3BdnEM

答案 1 :(得分:0)

当使用带有Angular的Typescript时,工厂注册需要一个返回工厂新实例的函数。

您可以通过以下方式完成此任务:

class UiRoutingHelper {
  static $inject = ['$state'];
  constructor(public $state: any) {};

  reloadCurrentView() {
    return this.$state.go(this.$state.current.name, this.$state.params, {
      reload: true
    });
  };
}

function factory(){
    return new UiRoutingHelper();
}

mp.core.CoreModule.factory('UiRoutingHelper', factory);