首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在对象中传递方法引用并调用它会引发问题,构造函数注入依赖项作为未定义的

在对象中传递方法引用并调用它会引发问题,构造函数注入依赖项作为未定义的
EN

Stack Overflow用户
提问于 2022-08-18 09:38:33
回答 1查看 15关注 0票数 0

这里是stackblits stackBlits实例的链接,我创建了数组并在数组的对象中传递了方法引用,但是构造函数注入的属性没有定义。

代码语言:javascript
复制
import { HttpClient } from '@angular/common/http';
import { Component, VERSION } from '@angular/core';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
})
export class AppComponent {
  constructor(public http: HttpClient) {
    alert(http);
  }

  PrintTwo() {
    alert(this.http);
    alert('two');
  }
  btns: Array<any> = [
    {
      name: 'two',
      title: 'two',
      functionToCall: this.PrintTwo,
      class: 'btn-danger',
    },
  ];
}

这是HTML部件

代码语言:javascript
复制
  <ng-container *ngFor="let btn of btns">
  <button
    class="btn me-4 {{ btn.class }}"
    [title]="btn.title"
    #btnElement
    (click)="btn.functionToCall()">
    {{ btn.name }}
  </button>
</ng-container>

这里是从警告对象中的构造函数来的,但是当从方法调用时,它是以未定义的方式出现的。

我不知道为什么会这样,我认为当我传递方法时,整个完整的方法被传递了,没有其他属性,这意味着它不以类方法作为参考,它所做的一切都是直接在方法中获取方法代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-18 09:45:43

表达式btn.functionToCall()是在btn上下文中调用的。这意味着this指向:

代码语言:javascript
复制
{
  name: 'two',
  title: 'two',
  functionToCall: this.PrintTwo,
  class: 'btn-danger',
}

尝试将PrintTwo绑定到正确的上下文:

代码语言:javascript
复制
{
  name: 'two',
  title: 'two',
  functionToCall: this.PrintTwo.bind(this),
  class: 'btn-danger',
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73400727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档