Mein Ziel ist es, eine editable
Richtlinie zu erstellen, die ein Benutzer HTML eines Elements das Attribut auf das bearbeiten können ist beigefügt (siehe Plunker: http://plnkr.co/edit/nIrr9Lu0PZN2PdnhQOC6)Get original transkludierte Inhalt innerhalb Winkel Richtlinie
Diese fast Werke außer Ich kann nicht das ursprüngliche unverarbeitete HTML des übersetzten Inhalts erhalten, um den Textbereich zu initialisieren. Ich kann den Text aus clone.text()
bekommen, aber das fehlt die HTML-Tags wie <H1>
, <div>
usw. so ohne Änderungen klicken gelten nicht idempotent.
Verfahren clone.html()
einen Fehler führen, 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;
}
}
}
});
(Diese Frage ist im Wesentlichen ein Großschreibungs der Frage und Code nach einem frühen Versuch, die Frage zu Rahmen, Get original transcluded content in Angular directive)
'clone' ist eine Sammlung von Elementen. Können Sie es in einem Debugger überprüfen? –
Aha! Das Iterieren über sie und das Anfügen von outerHTML ist viel näher: 'var text =" "; für (var i = 0; i' zeigt es ' '. In diesem Beispiel enthält die Uhr keinen Inhalt, daher ist der Nettoeffekt gleich. Ich frage mich, ob es möglich ist, das ursprüngliche HTML zu bekommen? –
prototype
Clock
{{time}}
Ich vermutete, dass es der Fall sein könnte. Gutes Geschäft. Der ursprüngliche HTML-Code befindet sich möglicherweise im $ element-Objekt im äußeren Bereich. Die Eingewöhnung ist nicht meine Stärke. –