<!doctype html>
<html ng-app="plunker">
<head>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.2/angular.min.js"></script>
<script src="http://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.10.0.js"></script>
<script src="example.js"></script>
<link href="//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div ng-controller="AccordionDemoCtrl" id="akkordion"></div>
<!--comment-->
<script type="text/javascript">
<!-- document.all.akkordion.innerHTML="<accordion close-others=\"true\"><accordion-group heading=\"Test1\">Testinhalt1</accordion-group></accordion>";-->
var json = '[{"name":"Menue1","isOpen":"false","groups":[{"name":"Menue11","isOpen":"false","groups":""}]},{"name":"Menue2","isOpen":"false","groups":""},{"name":"Menue3","isOpen":"false","groups":""}]';
var ary = JSON.parse(json);
var accView = "";
var accLevel = 0;
var accName = "groups";
var accBuild = function (obj){
if (typeof(obj)==="object"){
for (var i in obj) {
accView = accView + "<accordion close-others=\"true\">";
accView = accView + "<accordion-group ng-repeat=\""+(accName+accLevel);
if(accLevel>0){
accView = accView + " in "+accName+".groups\" is-open=\"{{"+(accName+accLevel)+".isOpen}}\"><accordion-heading><div ng-click=\"opened("+(accName+accLevel)+".name)\">{{"+(accName+accLevel)+".name}}</div></accordion-heading>";
}else{
accView = accView + " in "+accName+"\" is-open=\"{{"+(accName+accLevel)+".isOpen}}\"><accordion-heading><div ng-click=\"opened("+(accName+accLevel)+".name)\">{{"+(accName+accLevel)+".name}}</div></accordion-heading>";
}
accName = accName+accLevel;
accLevel = accLevel + 1;
accBuild(obj[i].groups);
accView = accView + "</accordion-group></accordion>";
}
}
}
accBuild(ary);
alert(accView);
document.all.akkordion.innerHTML=accView;
</script>
</body>
</html>
<!--
finally: we build up Angularjs accordion tags before compile.
This happens with pure javascript. Pure js runs before angular starts.
So, all I have to do is to write a js function that creates a chunck
of ng-Html.
This js function has to be recursive. Because we don't know how deep the
multi level accordion would be.
How to force Angular do a "reinit" to rescan all the DOM if a portion
of page has been dynamically added?
https://github.com/angular/angular.js/issues/6184
AngularJS - Compiling dynamic HTML strings from database
http://stackoverflow.com/questions/18157305/angularjs-compiling-dynamic-html-strings-from-database
Plunker Demo for $compile
http://plnkr.co/edit/F91xvGHBASvqCGBJcEYY?p=preview
ng-include loads and compile views
http://docs.angularjs.org/api/ng/directive/ngInclude
Tips ng
http://www.benlesh.com/search/label/AngularJS
Insert and parse HTML into view using AngularJS
http://stackoverflow.com/questions/18690804/insert-and-parse-html-into-view-using-angularjs
-->
angular.module('plunker', ['ui.bootstrap']);
function AccordionDemoCtrl($scope) {
$scope.opened = function (groupname) {
console.log("Opened group: "+ groupname);
};
$scope.groups = ary;
}