Contenu dynamique dans la Dynamique de l'Onglet (Angulaire, UI Bootstrap)
Je voudrais utiliser ng-à inclure dans le contenu généré dynamiquement, un onglet en utilisant AngularJs et UI Bootstrap.
J'ai un Plunker ici:
http://plnkr.co/edit/2mpbovsu2eDrUdu8t7SM?p=preview
<div id="mainCntr" style="padding: 20px;">
<uib-tabset>
<uib-tab ng-repeat="tab in tabs" active="tab.active" disable="tab.disabled">
<uib-tab-heading>
{{tab.title}} <i class="glyphicon glyphicon-remove-sign" ng-click="removeTab($index)"></i>
</uib-tab-heading>
{{tab.content}}
</uib-tab>
</uib-tabset>
</div>
Code JS:
$scope.addTab = function() {
var len = $scope.tabs.length + 1;
var numLbl = '' + ((len > 9) ? '' : '0') + String(len);
var mrkUp = '<div>' +
'<h1>New Tab ' + numLbl + ' {{foo}}</h1>' +
'<div ng-include="tab.tabUrl" class="ng-scope"></div>' +
'</div>';
$scope.tabs.push({title: 'Tab ' + numLbl, content: $compile(angular.element(mrkUp))($scope)});
}
Dans le Plunker, cliquez sur le "Ajouter un Onglet" bouton. Il appelle une fonction dans $portée qui pousse un nouvel onglet pour la collection, mais en passant dans certains contenu généré dynamiquement, qui comprend une ng-directive include. Le résultat attendu est que le ng-include seront affichés à l'intérieur de l'onglet zone de contenu.
Grâce
- Votre plunk ne fonctionne pas correctement, je pense?
- Je ne pouvais pas le faire fonctionner. Le plunk est juste une tentative de ma part, en espérant que quelqu'un ici peut m'aider à le faire fonctionner.
- ...oh, maintenant ça fonctionne. Quand je l'ai regardé plus tôt, il a été brisé. Prenons un coup d'oeil à nouveau.
- Maintenant que j'y pense, tu fais $compiler avant de pousser la languette. Envisager de mettre une montre sur votre $champ d'application.onglets qui vous permettent d'exécuter $compiler une fois que vous avez poussé sur elle.
Vous devez vous connecter pour publier un commentaire.
Dans votre Plunker vous utilisez
ng-bind-html
ce qui ne veut pas compiler le code HTML pour vous. Vous pouvez créer une nouvelle directive qui le fait pour vous.Code Source pour
ng-bind-html
:Choisir un nom pour la nouvelle directive, par exemple
compile-html
.Remplacer
tAttrs.ngBindHtml
avectAttrs.compileHtml
(ou tout autre nom que vous avez choisi).Vous avez besoin de remplacer
$sce.getTrustedHtml
avec$sce.trustAsHtml
, ou vous obtiendrezError: [$sce:unsafe] Attempting to use an unsafe value in a safe context.
Alors vous devez faire appel
$compile
:Complète de la directive:
Utilisation:
Démo: http://plnkr.co/edit/TRYAaxeEPMTAay6rqEXp?p=preview
Ma situation pourrait ne pas être aussi complexe, de sorte que cette solution simple œuvres:
HTML est
HTML:
Dans mon cas, le premier onglet est peuplée par l'angle de routeur, c'est pourquoi l'onglet tableau est un indice de
tabs.active