javascript 在Angular 风格的应用程序中,除了onload之外,如何在DOM标记加载后触发函数

h7wcgrx3  于 2023-04-28  发布在  Java
关注(0)|答案(3)|浏览(205)

我需要显示一个简单的当前时间与Angular 为基础的应用程序。我试过demo。
在主体中onload函数执行该函数块。

<body onload="startTime()">
function startTime() {

}

我不想在JavaScript中执行函数。Onload是一个JavaScript预定义的函数,在angular中是否有类似ngload的指令?需要为此编写自定义指令或
Nginit的行为类似,或者我可以调用运行块内的函数,这意味着与Angular Run和JavaScript onload有什么区别?
如果使用ng-init,需要一个控制器,没有控制器运行块在那里执行Angular 功能。是否有任何其他选项可显示在DOM加载。

t40tm48m

t40tm48m1#

使用angular API中的ngAfterViewInit
可以通过从angular/core导入ngAfterViewInit来将其用作生命周期钩子。
它的典型实现如下所示:

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

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent implements AfterViewInit  {
   public ngAfterViewInit() {
     // Do the logic here
   }
}

参考:https://angular.io/api/core/AfterViewInit

cx6n0qe3

cx6n0qe32#

你可以使用angular的$window对象:

$window.onload = function(e) {
  //your magic here
}
oymdgrw7

oymdgrw73#

方法一
使用视图初始化后

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

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent implements OnInit, AfterViewInit  {
   public ngAfterViewInit() {
     // Do the logic here
   }
}

方法二
使用路由器导航结束

NavigationEND是导航成功结束时的事件触发器,事件退订后页面满载,订阅并执行函数。

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

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

  constructor(    private router: Router,  ) {  }

  ngOnInit(): void {
    this.router.events
      .pipe(
        filter((event) => event instanceof NavigationEnd),
        takeUntil(this.unsubscribe$)
      )
      .subscribe((event) => {
        this.siteTrafficData();
      });
  }

  siteTrafficData() {
         // Do the logic here
  }
}

相关问题