【问题标题】:I need to execute a function every x seconds with angular 2 and typescript我需要每 x 秒使用 angular 2 和 typescript 执行一个函数
【发布时间】:2017-09-25 21:26:26
【问题描述】:

这是我要执行的功能,在 app.component.ts 中

public goLocalization() :void {
    this.localizationService.getLocalizationHttp().then(response => {
      localStorage.setItem("locatios", JSON.stringify(response));
    });
    console.log('goLocalization');
  }

从这里我正在拨打电话,但它没有执行并且出错

<body onLoad="setInterval('goLocalization()',1000);"></body>

这是错误

Uncaught ReferenceError: goLocalization is not defined
    at <anonymous>:1:1

【问题讨论】:

  • 为什么不在应用组件类的ngOnInit 中这样做?
  • 您应该使用 (load)='...' 作为角度上下文。
  • 如果我已经找到了使用 OnInit 接口并在函数 ngOnInit () {} 中使用的解决方案

标签: html angular typescript html5-video


【解决方案1】:

在 Angular 世界中,事件是使用括号捕获的。您可以像拥有它一样捕获加载事件,但它需要花括号 {{}} 来接收组件上下文。

理想的选择是将事件名称括在括号中并删除“on”文本。

<body onLoad="{{setInterval('goLocalization()',1000);}}"></body>

<body (load)="setInterval('goLocalization()',1000);"></body>

也许?

<body [onLoad]="setInterval('goLocalization()',1000);"></body>

【讨论】:

  • @RicardoValderramaMadrigal 对于这样的事情绝对是一个更好的解决方案。
【解决方案2】:

body.onLoad 将在 Angular 上下文之外执行,因此它看不到 goLocalization

你真正应该做的是

  • 在根组件中注入您的服务
  • 选择适当的生命周期阶段(在初始化时、在内容初始化后等)
  • 将它(生命周期接口和方法)添加到您的根组件(又名 AppComponent)中,并在那里使用 goLocalization 调用 setInterval

【讨论】:

    【解决方案3】:

    我可以使用 OnInit 接口和 ngOnInit (){}找到解决方案

    在方法中我放了以下代码

    ngOnInit () {
     setInterval(() => {
          this.goLocalization();
        }, 1000);
    }
    

    【讨论】:

      猜你喜欢
      • 2019-03-11
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 2019-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多