我的目標是創建一個editable
指令,允許用戶修改該屬性附加任何元素的HTML(見Plunker:http://plnkr.co/edit/nIrr9Lu0PZN2PdnhQOC6)獲取角指令中原來transcluded內容
這幾乎作品除我無法獲取原文的原始HTML轉換內容來初始化文本區域。我可以從clone.text()
獲得它的文本,但是缺少如<H1>
,<div>
等HTML標記,因此單擊應用而不進行編輯並不是冪等的。
方法clone.html()
引發錯誤,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;
}
}
}
});
(這個問題本質上是較早嘗試到幀的問題後的問題和代碼的批發重寫,Get original transcluded content in Angular directive)
'clone'是一個元素的集合。你是否能夠在調試器中檢查它? –
啊哈!遍歷它們並附加outerHTML更接近:'var text =「」; for(var i = 0; i'它顯示' '。在這個例子中,時鐘不會傳輸內容,所以實際效果是一樣的。我想知道是否有可能獲得原始的HTML? –
prototype
Clock
{{time}}
我懷疑它可能是這種情況。好交易。原始HTML可能位於外部作用域中的$ element對象中。包容並不是我的強項。 –