J'ai un tableau sur HTML et chaque ligne mène à une page différente, avec plus de détails sur cette ligne. Mais comme j'utilise angularjs, avec ng-click, je ne peux pas faire un clic droit sur cette ligne et sélectionner "ouvrir dans un nouvel onglet". Existe-t-il un moyen de le résoudre?
Merci d'avance!
Si possible, vous devez convertir votre élément en élément d'ancrage.
<a ng-href="{{ your dynamic url }}" ng-click="your function">Your link text</a>
Le navigateur interprétera l'élément comme un lien et vous fournira donc la liste déroulante correcte. Notez que vous devez également avoir la valeur href correcte pour ouvrir dans un nouvel onglet.
EDIT: Je recommanderais cette question si vous voulez une réponse plus détaillée sur la façon de corriger ce type de comportement à l'aide de JQuery.
Dans votre fonction ng-click, vous pouvez appeler window.open(url, '_blank')
mais comme mot d'avertissement , cela dépendra du navigateur et des paramètres actuels .
Dans certains cas, cela s'ouvrira dans une fenêtre contextuelle et dans d'autres cas, il s'ouvrira dans un nouvel onglet. Il n'y a aucun moyen de forcer l'un ou l'autre comportement car le javascript est indépendant du navigateur, il a simplement demandé une nouvelle fenêtre et c'est au navigateur de décider comment l'implémenter. voir ici pour une discussion sur le forçage d'un onglet ou d'une fenêtre
Cependant, la seule façon d'obtenir cette option de clic droit ou le ctrl + clic pour l'ouvrir dans un nouvel onglet est si le navigateur voit un <a>
tag. Sinon, il ne le traite pas comme un lien.
Si vous souhaitez générer votre href
dynamiquement en fonction d'une condition, vous pouvez définir votre href
sur ng-mousedown
événement et après cela, vous pouvez effectuer n'importe quel événement comme open link in new tab
, open link in new window
et click
.
HTML:
<a href="javascript:void(0)" ng-mousedown="openDetailView($event, userRole)">{{label}}</a>
JS:
$scope.openDetailView = function (event, userRole) {
if(userRole == 'admin') {
jQuery(event.target).attr('href', 'admin/view');
} else {
jQuery(event.target).attr('href', 'user/view');
}
};
Vous devez utiliser l'élément d'ancrage à l'intérieur de la ligne du tableau.
HTML
<tr>
<a ng-href="dynamic url" ng-click="openItem($event)">Open the item</a>
</tr>
Contrôleur
$scope.openItem = function (event) {
event.preventDefault();
// code to open a item
}