在 Typescript 中将 $state 和 $stateParams 的引用添加到 $rootScope(角度)
Posted
技术标签:
【中文标题】在 Typescript 中将 $state 和 $stateParams 的引用添加到 $rootScope(角度)【英文标题】:Add reference to $state and $stateParams to $rootScope in Typescript (angular) 【发布时间】:2015-03-02 03:05:51 【问题描述】:我正在尝试根据当前状态的数据(在 ui-router 中配置)设置我的 Angular 应用的页面标题。
<title ng-bind="$state.current.data.pageTitle></title>
在这个link 上,我发现了以下将$state/$stateParams 的引用添加到根范围:
.run([ '$rootScope', '$state', '$stateParams',
function ($rootScope, $state, $stateParams)
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
])
如何将其翻译成打字稿?
function run($rootScope: ng.IRootScopeService, $state : ng.ui.IState, $stateParams : ng.ui.IStateParamsService)
$rootScope.$state // 'state' cannot be resolved
【问题讨论】:
【参考方案1】:更新:此答案的先前版本不适用于角度严格模式或缩小。
因此我建议将此ng-strict-di 指令添加到index.html:
<html data-ng-app="App" ng-strict-di> // see ng-strict-di
<head>
这表明正确的方法是:
module App
export class RootConfig
static inject = ['$rootScope', '$state', '$stateParams'];
constructor(
$rootScope: any, //ng.IRootScopeService,
$state: ng.ui.IStateProvider,
$stateParams: ng.ui.IStateParamsService)
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
angular.module('App')
// wrong - not working in minified world
// .run(App.RootConfig);
// correct
.run(['$rootScope', '$state', '$stateParams', App.RootConfig]);
为什么是 $rootScope: any, //ng.IRootScopeService,
而不是 $rootScope: ng.IRootScopeService,
?为了让生活更轻松......并快速分配未声明的属性$state
和$stateParams
【讨论】:
@xvdiff 不得不说对不起,我的回答是半途而废。按照我的更新所示进行更改非常重要,以避免以后出现任何缩小问题 您还可以创建一个扩展IRootScopeService
的接口以添加$state
和$stateParams
,例如interface ICustomRootScopeService extends ng.IRootScopeService $state: ng.ui.IStateProvider; $stateParams: ng.ui.IStateParamsService;
(请原谅格式化。【参考方案2】:
我找到了一条比设置为any
更干净的路由
declare module app
interface IScope extends ng.IScope
$root:IRootScopeService
interface IRootScopeService extends ng.IRootScopeService
$state:ng.ui.IStateService
然后要使用它,只需声明如下
constructor(
$rootScope: app.IRootScopeService,
$state: ng.ui.IStateProvider
$rootScope.$state = $state;
【讨论】:
除了 Marius 的答案之外,我还回答了一个不同的问题,它将保持declaration
模块化。 ***.com/a/37225633/4742733以上是关于在 Typescript 中将 $state 和 $stateParams 的引用添加到 $rootScope(角度)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Vue 2 和 TypeScript 中将 $refs 字段转换为其组件类型?
在 TypeScript 和 NestS 中将类转换为类/对象(实体到 DTO)
在 Typescript 和 AWS Lambda 中将 DynamoDB 数据格式化为普通 JSON
如何在 Typescript 中将具有动态键的对象设置为 React 状态