Por que causa replace=true
ou replace=false
não impacto no código abaixo?
Por que "algum conteúdo existente" não está sendo exibido quando replace = false?
Ou, colocando de forma mais humilde, você poderia explicar qual é o replace=true/false
recurso nas diretivas e como usá-lo?
Exemplo
JS / Angular:
<script>
angular.module('scopes', [])
.controller('Ctrl', function($scope) {
$scope.title = "hello";
})
.directive('myDir', function() {
return {
restrict: 'E',
replace: true,
template: '<div>{{title}}</div>'
};
});
</script>
HTML:
<div ng-controller="Ctrl">
<my-dir><h3>some existing content</h3></my-dir>
</div>
Veja no Plunker aqui:
angularjs
angularjs-directive
Kaya Toast
fonte
fonte
Respostas:
Quando você
replace: true
obtiver a seguinte parte do DOM:Considerando que, com
replace: false
você, obtenha isto:Portanto, a
replace
propriedade nas diretivas refere-se a se o elemento ao qual a diretiva está sendo aplicada (<my-dir>
nesse caso) deve permanecer (replace: false
) e o modelo da diretiva deve ser anexado como seu filho,OU
o elemento ao qual a diretiva está sendo aplicada deve ser substituído (
replace: true
) pelo modelo da diretiva.Em ambos os casos, os filhos do elemento (aos quais a diretiva está sendo aplicada) serão perdidos. Se você quisesse preservar o conteúdo original do elemento / filhos, você teria que traduzi-lo. A seguinte diretiva faria isso:
Nesse caso, se no modelo da diretiva você tiver um elemento (ou elementos) com atributo
ng-transclude
, seu conteúdo será substituído pelo conteúdo original do elemento (ao qual a diretiva está sendo aplicada).Veja o exemplo de translusão http://plnkr.co/edit/2DJQydBjgwj9vExLn3Ik?p=preview
Veja isto para ler mais sobre translusão.
fonte
replace
está obsoleto desde AngularJS v1.3 ( link ).replace:true
está obsoletoDo Docs:
- API de diretiva abrangente AngularJS
Do GitHub:
- AngularJS Issue # 7636
Atualizar
Problemas com substituir: verdadeiro
transclude: element
na raiz do modelo de substituição pode ter efeitos inesperadosPara mais informações, veja
replace:true
fonte
remove-host
solução alternativa stackoverflow.com/questions/34280475/… se você descobrir como ativarreplace: true
em A2, nos informe.