@Tim庫爾特,我創建的東西以下@Stewie的想法。
它絕對可以改善,但我想這是一個很好的起點。
我創建了一個小的指令手風琴的面板的單擊事件綁定。點擊事件時,我通過panel-template=
屬性傳遞面板模板,並更新在面板內部使用的main-template
。
它使參考對包含各面板的內容2個的HTML文件(panel1.html和panel2.html)。 我建議創建一個服務來通過AJAX獲取這些文件 - 就像你想要的那樣。 在下面的代碼中,我爲此創建了一個名爲dataService
的服務,並且您應該將其綁定到click
事件 - 因此當用戶單擊它時,會按需加載文件。
注意的mainTemplate是一種常見的面板全部手風琴,所以當它改變了所有的手風琴將具有相同的內容,但我假設你想在時間顯示只有一個面板,對吧?!
反正我之前說的邏輯可以提高解決這些小「陷阱」,但我相信的核心功能是在那裏開始。 :)
<!doctype html>
<html ng-app="myApp">
<head>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js"></script>
<script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
<link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css" rel="stylesheet">
<script>
var myApp = angular.module('myApp', []);
myApp.controller('AccordionDemoCtrl', ['$scope', 'dataService', function ($scope, dataService) {
$scope.oneAtATime = true;
$scope.mainTemplate = '';
$scope.groups = [
{
id: "001",
title: "Dynamic Group Header - 1",
content: "Dynamic Group Body - 1",
template: "panel1.html"
},
{
id: "002",
title: "Dynamic Group Header - 2",
content: "Dynamic Group Body - 2",
template: "panel2.html"
}
];
}]);
myApp.factory('dataService', [ '$http', function($http){
return {
getData: function() {
return // you AJAX content data here;
}
}
}]);
myApp.directive('accordionToggle', [function() {
return {
restrict: 'C',
scope: {
mainTemplate: '=',
panelTemplate: '@'
},
link: function (scope, element, iAttrs) {
element.bind('click', function(e){
scope.mainTemplate = scope.panelTemplate;
scope.$apply();
});
}
};
}]);
</script>
</head>
<body ng-controller="AccordionDemoCtrl">
<div class="accordion" id="accordionParent">
<div class="accordion-group" ng-repeat="group in groups" >
<div class="accordion-heading">
<a class="accordion-toggle" main-template="$parent.mainTemplate" panel-template="{{ group.template }}" data-toggle="collapse" data-parent="#accordionParent" href="#collapse{{ $parent.group.id }}">
Collapsible Group Item {{ $parent.group.id }}
</a>
</div>
<div id="collapse{{ group.id }}" class="accordion-body collapse">
<div class="accordion-inner">
<div class="include-example" ng-include="mainTemplate"></div>
</div>
</div>
</div>
</div>
</body>
</html>
只需在面板內部使用'
',並在打開面板時定義/設置'panelTemplate' var。這將僅在面板第一次打開時執行XHR請求並獲取面板視圖。 – Stewie謝謝Stewie。這看起來很有前途,但我不清楚如何在面板打開時觸發panelTemplate的define/set。如果您想用代碼示例發佈答案,我會嘗試它並(可能)接受它。謝謝。 –