<!DOCTYPE html>
<html>
<head>
<link data-require="bootstrap@*" data-semver="3.3.7" rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"/>
<script data-require="jquery@*" data-semver="2.2.4" src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script data-require="bootstrap@*" data-semver="3.3.7" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script data-require="angular.js@*" data-semver="1.5.9" src="https://code.angularjs.org/1.5.8/angular.js"></script>
<script data-require="angular-route@1.5.8" data-semver="1.5.8" src="https://code.angularjs.org/1.5.8/angular-route.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body>
<div ng-app="mainApp">
<ng-view></ng-view>
</div>
</body>
</html>
// Code goes here
let mainApp = angular.module("mainApp", ["ngRoute"]).config(function($routeProvider) {
$routeProvider.
when('/', {
template: '<my-container></my-container>'
})
});
mainApp.component("myContainer", {
templateUrl: "myContainer.html",
});
var tab = {
bindings: {
label: '@'
},
require: {
tabs: '^^'
},
transclude: true,
/*template: `<div class="tabs__content" ng-if="$ctrl.tab.selected">
<div ng-transclude></div>
</div>`,*/
templateUrl:"tab.html"
controller: function () {
this.$onInit = function () {
this.tab = {
label: this.label,
selected: false
};
// this.tabs === require: { tabs: '^^' }
this.tabs.addTab(this.tab);
};
}
};
var tabs = {
bindings: {
selected: '@'
},
transclude: true,
/*template: `<div class="tabs">
<ul class="tabs__list">
<li ng-repeat="tab in $ctrl.tabs">
<a href=""
ng-bind="tab.label"
ng-click="$ctrl.selectTab($index);"></a>
</li>
</ul>
<div class="tabs__content" ng-transclude>
</div>
</div>`,*/
templateUrl:"tabs.html",
controller: function () {
this.$onInit = function () {
console.log("$onInit");
this.tabs = [];
};
this.addTab = function addTab(tab) {
console.log("addTab");
this.tabs.push(tab);
};
this.selectTab = function selectTab(index) {
for (var i = 0; i < this.tabs.length; i++) {
this.tabs[i].selected = false;
}
this.tabs[index].selected = true;
};
this.$postLink = function () {
console.log("$postLink. nr of tabs added: " + this.tabs.length);
this.selectTab(this.selected);
};
}
};
mainApp
.component('tab', tab)
.component('tabs', tabs);
/* Styles go here */
div.item{
margin-left:100px;
height:100px;
}
<tabs selected="1">
<tab label="Tab 1">
Tab 1 contents!
</tab>
<tab label="Tab 2">
Tab 2 contents!
</tab>
<tab label="Tab 3">
Tab 3 contents!
</tab>
</tabs>
<div class="tabs">
<ul class="tabs__list">
<li ng-repeat="tab in $ctrl.tabs">
<a href=""
ng-bind="tab.label"
ng-click="$ctrl.selectTab($index);"></a>
</li>
</ul>
<div class="tabs__content" ng-transclude>
</div>
</div>
<div class="tabs__content" ng-if="$ctrl.tab.selected">
<div ng-transclude></div>
</div>