Je voudrais utiliser AngularJS UI Bootstrap Tabs dans mon projet, mais j'en ai besoin pour prendre en charge le routage.
Par exemple:
Tab URL
--------------------
Jobs /jobs
Invoices /invoices
Payments /payments
Autant que je sache à partir du code source, les directives actuelles tabs
et pane
ne prennent pas en charge le routage.
Quel serait le meilleur moyen d'ajouter un routage?
Pour ajouter un routage, vous utilisez généralement une directive ng-view. Je ne suis pas sûr qu'il soit assez facile de modifier l'interface utilisateur angulaire pour prendre en charge ce que vous recherchez, mais voici un plunker indiquant approximativement ce que je pense que vous recherchez (ce n'est pas nécessairement la meilleure façon de le faire - J'espère que quelqu'un pourra vous donner une meilleure solution ou améliorer ce point)
Utilisez data-target = "# tab1". A travaillé pour moi
Cette réponse m'a vraiment aidé http://odetocode.com/blogs/scott/archive/2014/04/14/deep-linking-a-tabbed-ui-with-angularjs.aspx (solution simple mais puissante )
J'ai également cette exigence et je fais quelque chose de similaire à la réponse fournie par Chris, mais j'utilise aussi le routeur AngularUI , car ngRouter ne prend pas en charge les vues imbriquées et il est possible que vous ayez le contenu des onglets voir à l'intérieur d'une autre vue (je l'ai fait) et cela ne fonctionnera pas avec ng-view.
Acceptez l’utilisation de UI-Router, qui permet de suivre les états et fonctionne parfaitement avec les vues imbriquées. En ce qui concerne plus particulièrement le problème des onglets Bootstrap, il existe une excellente implémentation qui exploite l'interface utilisateur du routeur: Onglets de l'interface utilisateur
vous pouvez passer vos propres paires de valeurs de clé personnalisées dans la définition de route et y parvenir. Voici un bon exemple: http://www.bennadel.com/blog/2420-Mapping-AngularJS-Routes- Sur-URL-Parameters-And-Client-Side-Events.htm
Si vous avez un itinéraire appelé paramètres et que vous souhaitez avoir des onglets dans cette page de paramètres, cela fonctionne.
<div class="right-side" align="center">
<div class="settings-body">
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="#!/settings#private_email">Private email</a></li>
<li><a data-toggle="tab" href="#!/settings#signature">Signature</a></li>
<li><a data-toggle="tab" href="#menu2">Menu 2</a></li>
</ul>
<div class="tab-content">
<div id="private_email" class="tab-pane fade in active">
<div class="row" ng-controller="SettingsController">
<div>
<button class="btn btn-primary" ng-click="activatePrivateEmail()">Activate email</button>
<button class="btn btn-danger">Deactivate email</button>
</div>
</div>
</div>
<div id="signature" class="tab-pane fade">
<textarea ui-tinymce="tinymceOptions" ng-model="signature"></textarea>
<div class="send-btn">
<button name="send" ng-click="" class="btn btn-primary">Save signature</button>
</div>
</div>
<div id="menu2" class="tab-pane fade">
<h3>Menu 2</h3>
<p>Some content in menu 2.</p>
</div>
</div>
</div>
</div>
juste un petit ajout à la réponse acceptée: J'avais besoin de garder l'onglet actuel lors de l'actualisation de la page, donc j'ai utilisé un commutateur comme celui-ci:
$scope.tabs = [
{ link : '#/furnizori', label : 'Furnizori' },
{ link : '#/total', label : 'Total' },
{ link : '#/clienti', label : 'Clienti' },
{ link : '#/centralizator', label : 'Centralizator' },
{ link : '#/optiuni', label : 'Optiuni' }
];
switch ($location.path()) {
case '/furnizori':
$scope.selectedTab = $scope.tabs[0];
break;
case '/total':
$scope.selectedTab = $scope.tabs[1];
break;
case '/clienti':
$scope.selectedTab = $scope.tabs[2];
break;
case '/centralizator':
$scope.selectedTab = $scope.tabs[3];
break;
case '/optiuni':
$scope.selectedTab = $scope.tabs[4];
break;
default:
$scope.selectedTab = $scope.tabs[0];
break;
}
J'ai des onglets avec le routage qui fonctionne de la manière suivante.
Il est capable de faire tout ce que vous voulez à partir d'onglets dynamiques, et c'est en fait très simple.
ui-view
, afin qu'il puisse charger dynamiquement des modèles,active
.Définir les onglets avec un paramètre dans votre routeur
.state('app.tabs', {
url : '/tabs',
template : template/tabs.html,
})
.state('app.tabs.tab1', {
url : '/tab1',
templateUrl : 'template/tab1.html',
params : {
tab : 'tab1'
}
})
.state('app.visitors.browser.analytics', {
url : '/tab1',
templateUrl : 'template/tab2.html',
params : {
tab : 'tab2'
}
})
Le modèle d'onglets (tabs.html) est
<div ng-controller="TabCtrl as $tabs">
<uib-tabset active="$tabs.activeTab">
<uib-tab heading="This is tab 1" index="'tab1'" ui-sref="app.tabs.tab1"></uib-tab>
<uib-tab heading="This is tab 2" index="'tab2'" ui-sref="app.tabs.tab2"></uib-tab>
</uib-tabset>
<div ui-view></div>
</div>
Ce qui est associé à un contrôleur très simple pour obtenir l'onglet actif actuel:
app.controller('TabCtrl', function($stateParams) {
this.activeTab = $stateParams.tab;
})