Angular-ui-router 打字稿定义

Posted

技术标签:

【中文标题】Angular-ui-router 打字稿定义【英文标题】:Angular-ui-router typescript definitions 【发布时间】:2017-10-23 07:24:18 【问题描述】:

当我们更新我们的应用程序以使用 angular-ui-router v1.0.3 时,我们在 typescript 定义方面遇到了一些问题。 由于我们使用 $stateChangeSuccess 事件,迁移指南告诉我们现在应该使用 TransitionService.onSuccess

当所有东西都编译为 js 时,它工作正常,但问题是 Typescript 定义文件(使用 npm/@types 下载)中不存在 TransitionService,这给我们构建时带来了麻烦。

https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/angular-ui-router

通过查看 node_modules 文件夹中的 ui-router 源文件夹,我可以看到源已经存在 typescript 定义文件。

    @types/angular-ui-router 的 typescript 定义是否缺少 TransitionService? 或者我应该使用源提供的定义文件吗? (如果有,怎么做?) 其他方式?

angular-ui-router api TransitionService: https://ui-router.github.io/ng1/docs/latest/classes/transition.transitionservice.html.

【问题讨论】:

有同样的问题。我认为@types 一个已经过时了。我们使用的是全局上下文,而不是模块,所以不确定如何在不导入 @uirouter/angularjs 的定义的情况下使用它。因为它似乎没有声明环境模块。 【参考方案1】:

我已经找到了您的问题的解决方案。 "$transitions" 具有 TransitionService 类型。

您可以在应用程序的任何 .ts 文件中从“@uirouter/angularjs”导入 TransitionService。那么请使用angularjs的依赖注入。

router.ts 文件:

import  TransitionService  from '@uirouter/angularjs';

export class AppRouter 

    static inject = ['$rootScope', '$state', '$stateParams', '$transitions'];

    constructor(
        $rootScope: any,
        $state: ng.ui.IStateProvider,
        $stateParams: ng.ui.IStateParamsService,
        $transitions: TransitionService
    )
    
        $rootScope.$state = $state;
        $rootScope.$stateParams = $stateParams;
    

app.ts:

angular
// main module initialization and injecting third party modules
.module(app, [
    'schemaForm', 'ui.router', 'base64', 'ng', 'ngMessages', 'angularMoment'
])
// angularjs configs
.config(routesConfig)
.run(['$rootScope', '$state', '$stateParams', '$transitions', AppRouter])

还请注意以下页面中描述的其他服务:https://ui-router.github.io/ng1/docs/latest/modules/injectables.html 以相同的方式注入:从“@uirouter/angularjs”导入。

例子:

 import 
     StateService, TransitionService, Transition, UrlRouter, UrlMatcherFactory,
     StateParams, StateRegistry, UIRouterGlobals, UIRouter, Trace, UrlService
  from "@uirouter/core";

【讨论】:

这使用模块。我相信 OP 正在使用环境声明构建他的应用程序。 我可以像你展示的那样导入 TransitionService。所以它解决了我的问题。谢谢。但正如@mrahhal 所说,使用环境声明时仍然存在问题。

以上是关于Angular-ui-router 打字稿定义的主要内容,如果未能解决你的问题,请参考以下文章

如何为 react-native 本机 ui 组件创建打字稿类型定义?

如何在打字稿中使用 angular-ui-bootstrap(模态)?

打字稿:React.forwardRef 带有来自@material-ui 的通用道具

打字稿 + Vue + Element-ui

Kylo UI - 创建新的打字稿模块

在打字稿中带有参数类型的角度 ui-state