window.onload不工作在角4

时间:2018-04-05 06:11:16

标签: javascript angular typescript

我想打开一个新的窗口弹出窗口,一旦在新的弹出窗口中加载了URL,我想关闭它。

这是我的组件

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit{
  title = 'app';

  ngOnInit():void{
    var popup=window.open('https://www.w3schools.com','newwindow','width=300,height=200');
    popup.onload=function(){
      alert("Hello");
      window.close();
    }
  }
}

在上面的代码中

popup.onload=function(){
   alert("Hello");
   window.close();
 }

无法正常工作,没有警报,窗户也没有关闭。 但如果我只是做

popup.alert("Hello");
popup.close(); 

它起作用了。但是我希望在整个URL加载时关闭窗口,即onload()函数。

请提供有关此问题的指示。

提前致谢!

3 个答案:

答案 0 :(得分:1)

如果可以的话,为什么要使用onLoad使用ngAfterViewInit()。 “在Angular初始化组件的视图和子视图/指令所在的视图后响应。”

popup: any;
ngOnInit():void{
this.popup=window.open('https://www.w3schools.com','newwindow','width=300,height=200');
}
ngAfterViewInit() {
this.popup.close();
}

导入ngAfterViewInit并尝试这是否适合您。

答案 1 :(得分:0)

angular 2 app在不同的环境中运行,如网络,移动设备,服务器端渲染,因此Windows对象可能在那里可用,也可能不在那里。所以这不是直接使用windows对象的最佳方法,而是提供返回windows对象的服务,并根据环境简单地替换服务实现

@Injectable()
export class WindowRef {
    constructor() {}

    getNativeWindow() {
        return window;
    }
}

答案 2 :(得分:0)

问题是您使用了“ alert(” Hello“);”并且没有引用弹出窗口。应该是

popup.onload=function(){
  alert("Hello");
  window.close();
}