Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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)中添加对$state的引用和对$rootScope的$stateParams的引用_Javascript_Angularjs_Typescript_Angular Ui Router - Fatal编程技术网

Javascript 在Typescript(angular)中添加对$state的引用和对$rootScope的$stateParams的引用

Javascript 在Typescript(angular)中添加对$state的引用和对$rootScope的$stateParams的引用,javascript,angularjs,typescript,angular-ui-router,Javascript,Angularjs,Typescript,Angular Ui Router,我正在尝试根据当前状态的数据(在ui路由器中配置)设置angular应用程序的页面标题 我怎样才能把它翻译成打字脚本 function run($rootScope: ng.IRootScopeService, $state : ng.ui.IState, $stateParams : ng.ui.IStateParamsService) { $rootScope.$state // 'state' cannot be resolved } 更新:此答案的早期版本将不适用于角度严格模

我正在尝试根据当前状态的数据(在ui路由器中配置)设置angular应用程序的页面标题

我怎样才能把它翻译成打字脚本

 function run($rootScope: ng.IRootScopeService, $state : ng.ui.IState, $stateParams : ng.ui.IStateParamsService) {
    $rootScope.$state // 'state' cannot be resolved
}

更新:此答案的早期版本将不适用于角度严格模式或缩小

因此,我建议将此指令添加到index.html中:


为什么使用此
$rootScope:any,//ng.IRootScopeService,
而不是此:
$rootScope:ng.IRootScopeService,
?为了让生活更轻松。。。并快速分配未声明的属性
$state
$stateParams

我发现一个比将其设置为
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;
}

@xvdiff不得不说对不起,我的回答是半途而废。如我的更新中所示,改变这一点非常重要,为了避免以后出现任何问题,您还可以创建一个扩展
IRootScopeService
的接口,以添加
$state
$stateParams
,例如
接口ICustomRootScopeService扩展了ng.IRootScopeService{$state:ng.ui.istateParamProvider;$stateParams:ng.ui.IStateParamsService;}
(请原谅格式化。除了马吕斯的回答之外,我还回答了另一个问题,这将使
声明保持模块化。
<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]);
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;
}