I want to create the following tabs with Angular UI:
(source: gyazo.com)
So, I'm adding the styles based on Bootstap's class names/markup:
.nav-tabs > li.new > a {
padding-top: 5px;
}
.nav-tabs > .new > a:after {
content: "NEW";
color: indianred;
font-size: 10px;
vertical-align: super;
padding-left: 2px;
}
(As you can see I need to compensate padding on <a>
a bit after I added super-scripted text, otherwise it is pushed down.)
Next, I have the following markup & code in html/js
files:
HTML:
<tabset>
<tab ng-repeat="tab in tabs" heading="{{ tab.title }}" active="tab.active" ><!-- ng-class="{new: tab.new}"-->
<div ng-include="tab.page"></div>
</tab>
</tabset>
JS:
var TabsDemoCtrl = function ($scope) {
$scope.tabs = [
{ title:"Tab 1", content:"Dynamic content 1" },
{ title:"Tab 2", content:"Dynamic content 2", active: true, 'new': true }
];
};
So, what's left is making Angular add a class named "new"
on the correct element based on tabs
array definition above. Unfortunately, I failed to figure out how.
As you can see I tried ng-class="{new: tab.new}"
(commented in html code), but this essentially breaks all class features, producing incorrect ng-class
atrribute when viewing it in Dev Tools:
ng-class="{new: tab.new} {active: active, disabled: disabled}"
Here's the Plunkr.
I'm not sure that you can apply ng-class to tabs like that. After trying and failing I decided to look at the bootstrap-ui source for tabs and made an interesting discovery related to the tab heading attribute. Apparently you can put html in the heading section if you place the tab-heading as a child to a tab element.
Check out the tabheading directive in here.
This is the example they show:
<tabset>
<tab>
<tab-heading><b>HTML</b> in my titles?!</tab-heading>
And some content, too!
</tab>
<tab>
<tab-heading><i class="icon-heart"></i> Icon heading?!?</tab-heading>
That's right.
</tab>
</tabset>
In your case I think you might be able to do something like this to get the same effect:
<tab ng-repeat="tab in tabs" active="tab.active">
<tab-heading>{{tab.title}} <span ng-show="tab.new">new</span></tab-heading>
<div ng-include="tab.page"></div>
</tab>