Chame outra diretiva da diretiva com os mesmos atributos e conteúdo
-
21-12-2019 - |
Pergunta
Quero substituir o comportamento de uma diretiva de biblioteca, chamada "ui-sref".Vejamos um exemplo:
<a ui-sref="edit" class="btn btn-small">
<i class="icon-pencil"></i> Edit
</a>
Agora, quero criar minha própria diretiva chamada, por exemplo, "ui-sref-anexado".O código ficará assim:
<a ui-sref-appended="edit" class="btn btn-small">
<i class="icon-pencil"></i> Edit
</a>
A saída que desejo deve ser:
<a ui-sref="user.edit" class="btn btn-small">
<i class="icon-pencil"></i> Edit
</a>
(e então obedeceu, então ui-sref poderia fazer seu trabalho)
Como posso implementar isso?O problema é que eu quero o meu a ter os mesmos atributos e conteúdo, mas mudou de ui-sref-appended="editar" para ui-sref="usuário.edit"
Solução
Defina o modelo da sua nova diretiva da seguinte forma
template : '<a ui-sref="user.edit" class="btn btn-small"> <i class="icon-pencil"</i> Edit</a>';
E defina user.edit na função de link ou passe o usuário para a diretiva por meio do membro do escopo.
Se você tiver um modelo dinâmico, poderá criar o modelo de diretiva na função de link.
app.directive('newDirective', function ($compile) {
return {
restrict: 'A',
link: function (scope, element, attrs) {
var template= '<a ui-sref="user.edit" class="{{btnClass}}"> <i class="icon-pencil"</i> Edit </a>';
element.append($compile(template)(scope));
},
scope: {
user: '=',
btnClass: '@'
}
}
});
EDITAR
Se você deseja apenas definir o ui-sref, basta adicionar o ui-sref como um atributo ao seu elemento e compilá-lo.
app.directive('uiSrefAppended', function ($compile) {
return {
restrict: 'A',
link: function (scope, element, attrs) {
element.attr('ui-sref', 'user.edit');
$compile(element)(scope);
},
scope: {
user: '='
}
}
});