Dlaczego ma replace=true
lub replace=false
nie ma żadnego wpływu na poniższy kod?
Dlaczego „niektóre istniejące treści” nie są wyświetlane, gdy replace = false?
Albo mówiąc bardziej pokornie, czy możesz uprzejmie wyjaśnić, jaka jest replace=true/false
funkcja dyrektyw i jak z niej korzystać?
Przykład
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>
Zobacz to w Plunker tutaj:
angularjs
angularjs-directive
Kaya Toast
źródło
źródło
Odpowiedzi:
Kiedy
replace: true
otrzymasz następujący fragment DOM:<div ng-controller="Ctrl" class="ng-scope"> <div class="ng-binding">hello</div> </div>
mając na uwadze,
replace: false
że otrzymujesz to:<div ng-controller="Ctrl" class="ng-scope"> <my-dir> <div class="ng-binding">hello</div> </my-dir> </div>
Tak więc
replace
właściwość w dyrektywach odnosi się do tego, czy element, do którego dyrektywa jest stosowana (<my-dir>
w tym przypadku) powinien pozostać (replace: false
), a szablon dyrektywy powinien zostać dołączony jako jego dziecko,LUB
element, do którego ma zastosowanie dyrektywa, należy zastąpić (
replace: true
) wzorem dyrektywy.W obu przypadkach dzieci elementu (do którego jest stosowana dyrektywa) zostaną utracone. Jeśli chciałbyś zachować oryginalną treść / dzieci elementu, musiałbyś to przetłumaczyć. Zrobiłaby to następująca dyrektywa:
.directive('myDir', function() { return { restrict: 'E', replace: false, transclude: true, template: '<div>{{title}}<div ng-transclude></div></div>' }; });
W takim przypadku, jeśli w szablonie dyrektywy masz element (lub elementy) z atrybutem
ng-transclude
, jego zawartość zostanie zastąpiona oryginalną treścią elementu (do którego dyrektywa jest stosowana).Zobacz przykład przeniesienia http://plnkr.co/edit/2DJQydBjgwj9vExLn3Ik?p=preview
Zobacz to, aby dowiedzieć się więcej o transpozycji.
źródło
replace
został uznany za przestarzały od wersji AngularJS 1.3 ( link ).replace:true
jest przestarzałeZ Dokumentów:
- AngularJS Comprehensive Directive API
Z GitHub:
- AngularJS, wydanie # 7636
Aktualizacja
Problemy z zamianą: prawda
transclude: element
w katalogu głównym szablonu zastępowania może mieć nieoczekiwane skutkiWięcej informacji znajdziesz w
replace:true
źródło
remove-host
obejścia stackoverflow.com/questions/34280475/ ... jeśli dowiesz się o aktywacjireplace: true
w A2, daj nam znać.