2014-04-14 4 views
22

Ho una tabella su HTML e ogni riga porta a una pagina diversa, con maggiori dettagli su quella riga. Ma come sto usando angularjs, con ng-click non posso fare clic destro su questa riga e selezionare 'open in a new tab'. C'è un modo per risolverlo?Come consentire 'Apri in una nuova scheda' quando si usa ng-clic?

Grazie in anticipo!

+0

avete letto questo ancora? http://stackoverflow.com/questions/17757837/when-click-a-button-then-open-a-new-tab-in-angular-js –

+1

Sì, ma non è un mio problema. Non voglio SEMPRE aprirlo in una nuova scheda, ma con ng-clik questa finestra non appare quando fai clic con il tasto destro del mouse sulla riga: http://puu.sh/88Mbz.png – jgabrielfaria

+0

che dire lasciare che il browser gestisca questo quando tasto destro? –

risposta

24

Se possibile, è necessario convertire l'elemento in elemento di ancoraggio.

<a ng-href="{{ your dynamic url }}" ng-click="your function">Your link text</a> 

Il browser interpreterà l'elemento come collegamento, e vi Perciò vi darà la discesa corretta. Nota che devi anche avere il valore href corretto da aprire in una nuova scheda.

EDIT: Suggerirei this question se si desidera una risposta più dettagliata su come risolvere questo tipo di comportamento utilizzando jQuery.

+0

Questo è un po 'di confusione. L'esempio fa sembrare che ho bisogno sia di 'ng-href' che di' ng-click' sullo stesso elemento. –

+0

Posso vederlo. Ma la domanda era "Come consentire 'Apri in una nuova scheda' quando si utilizza ng-clic?" Interrotto come voleva l'opzione 'Apri in una nuova scheda' su un elemento che utilizzava anche ng-clic. – Erex

+0

Avresti solo bisogno di ng-click o ng-href, se vuoi che entrambi aprano il link in una nuova scheda. Il codice angularJS controlla se l'URL del browser è uguale a quello sul ng-href e cambia gli URL se non lo sono. –

2

Dentro la funzione ng-click è possibile chiamare window.open(url, '_blank') tuttavia come un parola di avvertimento, questo dipenderà il browser e le impostazioni correnti.

In alcuni casi questo si aprirà in una finestra a comparsa e in altri casi verrà aperto in una nuova scheda. Non c'è modo di forzare alcun comportamento dal momento che il javascript è indipendente dal browser, ha semplicemente richiesto una nuova finestra e spetta al browser decidere come implementarlo. see here for a discussion on forcing a tab or window

Tuttavia, l'unico modo per ottenere che l'opzione tasto destro del mouse o il ctrl + clicca per aprire in una nuova scheda è se il browser vede un tag <a>. Altrimenti non lo tratta come un collegamento.

1

Se si desidera generare il vostro href dinamicamente in base a una certa condizione, allora si può impostare il vostro evento href su ng-mousedown e dopo che è possibile eseguire qualsiasi evento come open link in new tab, open link in new window e 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'); 

     } 
    }; 
1

devi usare elemento di ancoraggio all'interno della riga della tabella.

HTML

<tr> 
    <a ng-href="dynamic url" ng-click="openItem($event)">Open the item</a> 
</tr> 

controller

$scope.openItem = function (event) { 
    event.preventDefault(); 
    // code to open a item 
}