Il mio obiettivo è quello di creare una direttiva editable
che consente a un utente di modificare HTML di qualsiasi elemento a cui è collegato l'attributo (si veda Plunker: http://plnkr.co/edit/nIrr9Lu0PZN2PdnhQOC6)Ottenere contenuti transclusa originale entro direttiva angolare
Questo quasi lavori, ad eccezione Non riesco a ottenere l'originale HTML grezzo del contenuto escluso per inizializzare l'area di testo. Posso ottenere il testo di esso da clone.text()
, ma che manca i tag HTML come <H1>
, <div>
, ecc in modo cliccando applicare senza modifiche non è idempotente.
Procedimento clone.html()
genera un errore, Cannot read property 'childNodes' of undefined
app.directive("editable", function($rootScope) {
return {
restrict: "A",
templateUrl: "mytemplate.html",
transclude: true,
scope: {
content: "=editContent"
},
controller: function($scope, $element, $compile, $transclude, $sce) {
// Initialize the text area with the original transcluded HTML...
$transclude(function(clone, scope) {
// This almost works but strips out tags like <h1>, <div>, etc.
// $scope.editContent = clone.text().trim();
// this works much better per @Emmentaler, tho contains expanded HTML
var html = "";
for (var i=0; i<clone.length; i++) {
html += clone[i].outerHTML||'';}
});
$scope.editContent = html;
$scope.onEdit = function() {
// HACK? Using jQuery to place compiled content
$(".editable-output",$element).html(
// compiling is necessary to render nested directives
$compile($scope.editContent)($rootScope)
);
}
$scope.showEditor = false;
$scope.toggleEditor = function() {
$scope.showEditor = !$scope.showEditor;
}
}
}
});
(Questa domanda è essenzialmente una riscrittura all'ingrosso della domanda e codice dopo un tentativo precedente per inquadrare la questione, Get original transcluded content in Angular directive)
'clone' è una raccolta di elementi. Sei stato in grado di ispezionarlo in un debugger? –
Aha! L'iterazione su di essi e l'aggiunta di outerHTML è molto più vicina: 'var text =" "; for (var i = 0; i' mostra ' '. In questo esempio, l'orologio non esclude il contenuto, quindi l'effetto netto è lo stesso. Mi chiedo se è possibile ottenere l'HTML originale? –
prototype
Clock
{{time}}
Ho il sospetto che potrebbe essere il caso. Buon affare. L'HTML originale potrebbe trovarsi nell'oggetto $ elemento nello scope esterno. La Transclusione non è il mio forte seme. –