Почему document.open отправляет меня на пустую страницу? - PullRequest
0 голосов
/ 13 января 2020

Я хочу открыть внешний URL в новой вкладке из моего Angular 8 SPA.

Ответы на другие вопросы предполагают, что вы можете использовать window.open(url, "_blank") для достижения этой цели, и это работает для меня, но я ищу что-то, что я могу провести модульный тест.

Основываясь на ответе на другой вопрос , я попытался ввести Document и вызвать document.open(url, "_blank") вот так:

import { Component, OnInit, Input, Inject } from "@angular/core";
import { DOCUMENT } from "@angular/common";

@Component( ........ )
export class MyClass implements OnInit {

  private externalLink = "https://bbc.co.uk";

  constructor(@Inject(DOCUMENT) private readonly document: Document) { }

  ngOnInit() {
  }

  public navigate() {
    this.document.open(this.externalLink, "_blank");
  }
}

Однако при запуске экран сразу становится белым, и больше ничего не происходит. Ошибки не регистрируются на консоли, и размещение точки останова в методе показывает, что документ внедрен правильно, насколько я могу судить.

Если это не удается устранить, у меня возникает соблазн обернуть службу вокруг window.open() и введите это.

Ответы [ 2 ]

0 голосов
/ 23 февраля 2020

Без других ответов я сделал то, что предложил в своем вопросе. Я обернул небольшой сервис вокруг window.open примерно так:

import { Injectable } from "@angular/core";

@Injectable({
  providedIn: "root"
})
export class NewTabService {

  constructor() { }

  public open(url: string, newTab: boolean = false) {
    if (newTab) {
      window.open(url, "_blank");
      return;
    }

    window.location.href = url;
  }
}
0 голосов
/ 13 января 2020

Используйте этот код

window.open(this.externalLink, "_blank");

вместо

this.document.open(this.externalLink, "_blank");

Надеюсь, это поможет !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...