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.