注入ui-router解析指令

Pra*_*tta 15 angularjs typescript angular-ui-router

我正在使用ui-router,我正在解析一些我希望将解决方案注入我的自定义指令的数据,下面是代码我是怎么做的

 module portal {
           $stateProvider.state('portal', {
        url: '/demo',
        template: tpl.html,
        abstract: true,
        resolve: {

            demoResolve:function(){
                 return 'foo';//here i am returing a promise
        }
    });    

}


module portal.directives{


export class demoDirevtive{

    static $inject =['demoResolve'];
    constructor(demoResolve){
        console.log(demoResolve)
        var directive: ng.IDirective = {};
        directive.link = (scope, element, attrs, ctrl) => {

        };
        directive.restrict = "EAC";

        return directive;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但我得到了未知提供商的错误

Pin*_*niH 8

从阅读他们的代码看起来似乎不太可能,他们有一个局部变量,他们注入你在视图上定义的控制器,它也不能通过$ inject服务访问.

最简单的解决方案是将其放在控制器的范围内,然后在指令中使用它.

您还可以创建一个真实的服务,它将保存您应用程序中的所有已解析对象,即:

resolve: {
     demoResolve: ['myResolvingService', function(resolver) {
          resolver.myValue = 'Foo';
          return 'Foo';
     }]
Run Code Online (Sandbox Code Playgroud)

我知道这不是你想要的,但它看起来并不像是支持它.

  • 按照设计,ui-router解析只能注入控制器和onEnter/onExit回调.它们不能通过$ injector全局注射. (3认同)

tom*_*bak 8

以下是如何通过控制器将resolve值传递给指令的示例:

        .state('something.edit', {
            url: '/:id',
            template: '<something-edit title="title"></something-edit>',
            controller: function($scope, $title){
                $scope.title = $title;
            },
            resolve: {
                $title: ()=>{
                    return 'Something Edit';
                }
            }
        });
Run Code Online (Sandbox Code Playgroud)