Angularjs $ state відкрити посилання в новій вкладці


81

Я намагаюся реалізувати функцію "відкрити посилання в новій вкладці" за допомогою функції $ state.go. Було б чудово, якби там було щось подібне:

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

Чи можна це зробити за допомогою AngularJS?


Редагування у питанні, в якому сказано, що ви вирішили це за допомогою наступного коду, здається зайвим. Тобто. це передбачається тим фактом, що ви обрали його як прийняту відповідь.
Адам Цернер,

Виправлено, видалено редагування.
Alex Arvanitidis

Ви можете знайти відповідь тут Angularjs $ state відкрите посилання в новій вкладці
Dalorzo

Відповіді:


153

Оновлення: Добре, я щойно вирішив його, використовуючи такий код:

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

18
Чи не повинно це бути вікно $ для кращої практики?
цуз

3
Ви впевнені, що параметр можна передати в нове вікно?
hjl

Так @elaijuh вони будуть передані
Мануель Ді Іоріо

@alex я хочу націлити певне вікно, тому спробував window.open (url, 'myWindow'); але це не працює. Будь-яка допомога?
mhd

1
Зверніть увагу, що якщо ви відкриваєте посилання з javascript таким чином і змінюється базова URL-адреса, швидше за все, браузер заблокує його, сказавши, що сайт намагався відкрити спливаюче вікно, але якщо користувач приймає або уповноважує ваш веб-сайт це робити, це буде робота.
GabLeRoux

55

Я просто спробував це - мабуть, додавши target="_blank"роботи з ui-sref:

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

Зберігає проблеми з додаванням коду до контролера та надає вам URL-адресу при наведенні, як і будь-яке звичайне посилання. Безпрограшний!


3
це працює лише на <a>. "target", очевидно, не працює на інші елементи. тобто <button ui-sref = "routeHere" target = "_ blank"> Посилання </button>
Луїс,

2
Кнопки @Luis не мають атрибута Target, так що так, це не буде працювати
gerl

1
@Luis Можливо, ви можете використовувати класи, пов’язані з кнопками, і роль як кнопки для прив’язаного тегу, щоб зробити його схожим на кнопку. Наприклад:<a ui-sref="routeHere" target="_blank" class="btn btn-primary" role="button">A Link</a>
Сафван

7

У мене була подібна проблема, спробуйте це, якщо вам нічого з попередніх відповідей не підходить.

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

Отже, під час роботи в localhost, без додавання, '#'він просто перенаправляв на

localhost / попередній перегляд

, замість

localhost / Project_Name / # / preview

Я не беруся тут про передачу даних, просто щоб відкрити $ state у новій вкладці.


6

Це може не працювати на localhost, якщо ваш додаток знаходиться в підпапці. У мене було насправді те саме питання.

Я пробував в Інтернеті, і це працювало, як очікувалось, використовуючи:

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

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

цей код вирішив мою проблему.

використовувати це в прив'язковому тегу.


4

Найкраща відповідь, яку я знайшов, - це розширення ui.router, оскільки ця функція не існує вбудованою. Повну інформацію можна знайти тут:

Розширення $ state.go користувальницького маршрутизатора Angular 1.x

Однак, ось моє коротке пояснення того, що потрібно зробити, додайте це до app.js або angular app init файл:

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;
        }]);
}]);

У вашому коді

Ви зможете зробити:

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

2

Спробуйте це!

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


Це не має значення, я не сказав, що мені потрібно додати параметри до маршруту, який я викликаю, я сказав, що хочу відкрити цей маршрут у новій вкладці.
Alex Arvanitidis

Це може бути актуальним для багатьох людей. Я просто цим користувався. Тут слід згадати те, що ім’я параметра має бути в одинарних лапках. <a ui-sref="routeHere({'parameter': vm.parameter})" target="_blank"> </a>
Судхір Мухаммед
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.