Открыть только одну всплывающую вкладку с angular

#javascript #angular #typescript

#javascript #angular #typescript

Вопрос:

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

 onClick(){
        let url = this.router.createUrlTree(['/user/', this.id]);
        window.open(url.toString(), "_blank", "resizable=no, toolbar=no, scrollbars=no, menubar=no, status=no, directories=no, location=no, width=1000, height=600, left="   horizontal   " top=100 " );
        console.log(this.data.maxtab);
        } 
  

Это приводит к компоненту «user», который вложен в другой компонент.

И когда одна из них открыта, и вы пытаетесь открыть другой компонент, тот, который открыт, должен быть сфокусирован.

Я попытался изменить переменную, которую я назвал maxtab в ngOnDestroy компонента, но это не работает. Как я могу этого добиться? С помощью OnBeforeunload с помощью JS (посмотрел, но не смог реализовать) или есть другие способы?

Ответ №1:

попробуйте это,

объявить переменную в component.ts

 private mywindow;
  

Теперь в вашей функции попробуйте это:

 if(this.mywindow) {
 this.mywindow.close();
}
this.mywindow = window.open(url.toString(), "_blank", "resizable=no, toolbar=no, scrollbars=no, menubar=no, status=no, directories=no, location=no, width=1000, height=600, left="   horizontal   " top=100 " );
  

Комментарии:

1. Мы определяем mywindow внизу. Если я сделаю это таким образом, mywindow в условии if не будет найдено… но я понимаю принцип. Не могли бы вы выразиться точнее? Он должен закрывать всплывающее окно, только если оно существует, а не стартовое окно, которое всегда есть, может быть, здесь кроется ошибка?

2. Я отредактировал свой ответ на основе того, что вы сказали в приведенном выше комментарии. Если это не то, что вам нужно, не могли бы вы немного подробнее объяснить свое требование?

Ответ №2:

Вы должны использовать параметр name, чтобы указать название окна.

 window.open(URL, name, specs, replace)
  

пример:

 var myWindow = window.open(url.toString(), "mypopup", "resizable=no, toolbar=no, scrollbars=no, menubar=no, status=no, directories=no, location=no, width=1000, height=600, left=10 top=100");
if (myWindow) {myWindow.focus()}
  

Вы можете указать любое имя вместо «mypopup».

При этом вам не нужно закрывать предыдущее всплывающее окно, оно откроет новый URL с тем же всплывающим окном.

MyWindow.focus() установит фокус на уже открытом всплывающем окне при открытии нового предоставленного URL.