Инъекция u-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;
    }
  }
}

но я получаю ошибку неизвестного провайдера

Ответы

Ответ 1

Из-за чтения их кода это не похоже на то, что это возможно, у них есть локальная переменная, которую они вводят в контроллер, который вы определяете в представлении, он не доступен через службу $injection.

Самое простое решение - поместить его в область управления, а затем использовать его в директиве.

Вы также можете создать реальный сервис, который будет содержать все разрешенные объекты в вашем приложении, то есть:

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

Я знаю, что это не то, что вы искали, но просто не похоже, что оно поддерживается.

Ответ 2

Вот пример того, как передать значение разрешения директиве через контроллер:

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

Ответ 3

Они добавили поддержку для этого в 2016 году.

Это поток github:

https://github.com/angular-ui/ui-router/issues/2664#issuecomment-204593098

Важная часть:

в 0.2.19 мы добавляем $resolve к области $scope, позволяя вам создать стиль "route to component template"

template: <my-directive input="$resolve.simpleObj"></my-directive>,