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