我正在将我的角应用程序迁移到打字稿。我有以下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)。
答案 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);