Подтвердить что ты не робот

Как открыть новую вкладку в браузере, используя $location, angular?

У меня есть контроллер 'reportCtrl' и HTML, который представляет 6 таблиц с данными и только несколько строк, которые я показываю сразу.

app.js

var appReport = angular.module('myAppReport', []);

appReport.config(['$routeProvider', function($routeProvider) {
            $routeProvider.when('/showreport', {templateUrl: 'app/reports/reportsView.html', controller: 'reportCtrl'});
            $routeProvider.when('/showreport/:type', {templateUrl: 'app/reports/reportsView.html', controller: 'reportCtrl'});

В каждой таблице есть одна кнопка, которая при щелчке должна открывать новую вкладку в браузере с расширенной таблицей:

scope.onClick = function(path){
    var real_path = $location.path() + '/' + path + '/';
    $location.path( real_path );
    // $window.open($location.path()); // doesn't work
};

Например, у меня есть URL-адрес корневого представления:

http://dev.test.com/reports/date/#/showreport

Теперь, после нажатия кнопки, я хочу создать:

http://dev.test.com/reports/date/#/showreport/table_name

и откройте его на новой вкладке. Как вы видите, я пробовал $window.open($location.path());, но он не работает, ничего не происходит.

Спасибо,

4b9b3361

Ответ 1

Вы открываете новое окно, используя другую функцию, которая может смутить Angular.

Попробуйте передать строку в $window.open(real_path), где real_path - это строка, содержащая путь, по которому вы хотите перемещаться

Ответ 2

Если вы хотите открыть страницу angular на новой вкладке на кнопке Ctrl + клик или на той же вкладке, попробуйте следующее: -

HTML:

<a ng-click="navigationUrl($event)">My Link</a>

JS:

    var navigationUrl = function (event) {
            if (event.ctrlKey) {
                window.open(url, '_blank'); // in new tab
            } else {
                $location.path(url); // in same tab
            }
        };

Ответ 3

Еще один вариант - использовать ng-href

HTML:

 <a  ng-href="#/courses/{{employee.courseId}}/employees/{{employee.id}}" 
      target="_blank"> {{employee.employeeNumber}}
 </a>

Где url основан на том, где вы хотите перенаправить

Ответ 4

Для открытия нового представления в новом окне выполните следующий код:

window.open($location.$$absUrl.replace($location.$$path,NEW_PATH), '_blank');

Ответ 5

Хотя самый проголосовавший ответ здесь может работать для большинства сценариев, я хочу добавить способ, которым я нашел для достижения того, что хочет OP (мне тоже это нужно):

var viewPath = '/InsideMyView';
var currentPath = window.location.href.substr(0, window.location.href.indexOf('#') + 1);
var fullPath = currentPath + viewPath;
$window.open(fullPath, '_blank');

Объяснение. Вам просто нужно получить корневой URL для своего приложения, и вы можете использовать # в URL-адресе (который добавлен angular), а затем объединить представление путь для получения полного URL-адреса.

Ответ 6

Это сработало для меня.

HTML: <div ng-click="OpenBrowserInNewTab(someKeyValue)"</div>Click Me </div>

Контроллер:

`$scope.OpenBrowserInNewTab = (someKeyValue) ->
    tabWindowId = window.open('/abcdef/ghijk/' + someKeyValue + '', _blank')

    $http.post("/abcdef/ghijk/#someKeyValue", data).then (response) ->
        tabWindowId.location.href = response.headers('Location')
        return
    return`    

Ответ 7

Открытие нового вклада с параметром angular

   <a  target="_blank" class="btn" data-ng-href="@Url.Action("Hotel", "Home")?hotelCode={{hotel.code}}"> Click Hear</a>

Ответ 8

попробуй это 👇

window.open(yourURL+'create-account',)

window.open по умолчанию открыть ссылку в новой вкладке