我想創建一個指令,該指令可以使用AngularJS的遞歸樹結構,其中每個節點都可以在transclude部分中有自己的模板。無法替換ng模板中的元素
這裏是JS:
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.input = [{
name: 'blueberry cheesecake',
color: 'blue',
children: [{
name: 'blueberry cheesecake',
color: 'blue'
}, {
name: 'rocky road',
color: 'mostly brown'
}]
}, {
name: 'rocky road',
color: 'mostly brown'
}];
});
app.directive("auratree", function() {
return {
scope: {
input: "="
},
template: function(element) {
element.data("customListTemplate", element.find("item-template"));
var c =
'<script type="text/ng-template" id="auratree2">' +
'<item-placeholder></item-placeholder>' +
' <div ng-if="item.children">' +
' <div ng-repeat="item in item.children" ng-include="' +
"'" + 'auratree2' + "'" + '">' +
' <item-placeholder></item-placeholder></div>' +
' </div>' +
'</script>' +
'<div ng-repeat="item in input" ng-include = "' + "'" + 'auratree2' + "'" + '">' +
'</div>';
console.log(c);
return c;
},
compile: function(tElement, tAttrs) {
var template = tElement.data("customListTemplate");
tElement.find("script").html(tElement.find("script").html().replace("<item- placeholder></item-placeholder>", template.html()));
}
};
function link(scope, element, attrs) {}
});
下面是HTML
<!DOCTYPE html>
<html ng-app="plunker">
<head>
<meta charset="utf-8" />
<title>Aura Tree</title>
<script>document.write('<base href="' + document.location + '" />');</script>
<script data-require="[email protected]" src="https://code.angularjs.org/1.3.13/angular.js" data-semver="1.3.13"></script>
<script src="auratree.js"></script>
</head>
<body ng-controller="MainCtrl">
<pre>template 1:</pre>
<auratree input="input"> <item-template>
{{$index}} | {{item.name}}
<hr>
</item-template> </auratree>
</body>
</html>
此代碼
tElement.find("script")
.html(tElement.find("script").html()
.replace("<item-placeholder></item-placeholder>",template.html()));
在Chrome的工作,但不是在IE11工作。
通常element.replaceWith不工作,所以我試圖改變html ...但不成功。
請告訴我解決方案來克服這個問題。
這裏是plunker:
不工作.. BTW模板已被緩存..但我想更換使用replaceWith像** tElement佔位符的內容.find(「item-placeholder」)。replaceWith(template.contents()); ** –