Angularjs $ state otwórz link w nowej karcie


81

Próbuję zaimplementować funkcję „otwórz łącze w nowej karcie” przy użyciu funkcji $ state.go. Byłoby wspaniale, gdyby było coś takiego:

$state.go('routeHere', {
    parameter1 : "parameter"
    }, {
    reload : true,
    newtab : true // or smth like target : "_blank"
});

Czy można to zrobić za pomocą AngularJS?


Edycja w pytaniu mówiąca, że ​​rozwiązałeś go za pomocą następującego kodu, wydaje się zbędna. To znaczy. wynika to z faktu, że wybrałeś ją jako zaakceptowaną odpowiedź.
Adam Zerner

Naprawiono, usunięto edycję.
Alex Arvanitidis

Możesz znaleźć odpowiedź tutaj Angularjs $ state otwórz link w nowej karcie
Dalorzo

Odpowiedzi:


153

Aktualizacja: OK, właśnie rozwiązałem to za pomocą następującego kodu:

var url = $state.href('myroute', {parameter: "parameter"});
window.open(url,'_blank');

18
Czy nie powinno to być okno $ window dla najlepszych praktyk?
tsuz

3
Czy na pewno parametr można przekazać do nowego okna?
hjl

Tak @elaijuh, zostaną zdane
Manuel Di Iorio

@alex chcę kierować reklamy na zdefiniowane okno, więc spróbowałem window.open (url, 'myWindow'); ale to nie działa. Jakaś pomoc?
mhd

1
Zwróć uwagę, że jeśli otworzysz link z javascript w ten sposób i zmieni się podstawowy adres URL, prawdopodobnie przeglądarka go zablokuje, mówiąc, że witryna próbowała otworzyć wyskakujące okienko, ale jeśli użytkownik zaakceptuje lub autoryzuje twoją witrynę, aby to zrobić, praca.
GabLeRoux

55

Właśnie tego spróbowałem - najwyraźniej dodawanie target="_blank"działa z ui-sref:

<a ui-sref="routeHere" target="_blank">A Link</a>

Oszczędza kłopot z dodawaniem kodu do kontrolera i podaje adres URL po najechaniu kursorem, tak jak w przypadku każdego zwykłego łącza. Win-win!


3
działa to tylko na <a>. „target” najwyraźniej nie działa na innych elementach. tj. <button ui-sref = "routeHere" target = "_ blank"> Link </button>
Luis

2
@Luis Przyciski nie mają atrybutu Target, więc tak, to nie zadziała
gerl

1
@Luis Może możesz użyć klas związanych z przyciskami i roli jako przycisku dla tagu kotwicy, aby wyglądał jak przycisk. Np .:<a ui-sref="routeHere" target="_blank" class="btn btn-primary" role="button">A Link</a>
Safwan

7

Miałem podobny problem, spróbuj tego, jeśli nic z poprzednich odpowiedzi nie działa.

var url = '#' + $state.href('preview');
window.open(url,'_blank');

Zasadniczo podczas pracy na hoście lokalnym, bez dołączania '#'go, było po prostu przekierowaniem do

localhost / preview

, zamiast

localhost / nazwa_projektu / # / preview

Nie mówię tutaj o przekazywaniu danych, tylko po to, aby otworzyć $ state w nowej karcie.


6

Może nie działać na hoście lokalnym, jeśli Twoja aplikacja znajduje się w podfolderze. W rzeczywistości miałem ten sam problem.

Próbowałem online i działało zgodnie z oczekiwaniami, używając:

<a ui-sref="routeHere" target="_blank">Link</a>

4
ui-sref="routeHere" href=""target="_blank"

ten kod rozwiązał mój problem.

użyj tego w tagu kotwicy.


4

Najlepszą odpowiedzią, jaką znalazłem, było rozszerzenie ui.router, ponieważ ta funkcja nie istnieje w wersji wbudowanej. Pełne szczegóły można znaleźć tutaj:

Rozszerzanie pliku $ state.go w Angular 1.x ui-router

Jednak tutaj jest moje krótkie wyjaśnienie, co należy zrobić, dodaj to do pliku app.js lub pliku init aplikacji kątowej:

angular.module("AppName").config(['$provide', function ($provide) {
    $provide.decorator('$state', ['$delegate', '$window',
        function ($delegate, $window) {
            var extended = {
                goNewTab: function (stateName, params) {
                    $window.open(
                        $delegate.href(stateName, params, { absolute: true }), '_blank');
                }
            };
            angular.extend($delegate, extended);
            return $delegate;
        }]);
}]);

W twoim kodzie

Będziesz mógł:

$state.goNewTab('routeHere', { parameter1 : "parameter"});

2

Spróbuj tego!

<a ui-sref="routeHere({parameter: vm.parameter})" target="_blank"></a>


To nie ma znaczenia, nie powiedziałem, że muszę dodawać parametry do trasy, którą dzwonię, powiedziałem, że chcę otworzyć tę trasę w nowej karcie.
Alex Arvanitidis

Może to mieć znaczenie dla wielu osób. Właśnie tego użyłem. Należy tu wspomnieć, że nazwa parametru powinna być ujęta w pojedyncze cudzysłowy. <a ui-sref="routeHere({'parameter': vm.parameter})" target="_blank"> </a>
Sudheer Muhammed
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.