Angular:为组件字段提供对服务功能的引用并从模板调用它,但未按预期工作

2023-12-07

在我的 Plunker 里(修改的英雄之旅来自官方文档的应用程序)我在hero.service

  doHeroesExist(): boolean {
   console.log("doHeroesExist called..", this.heroesExist);
   alert("doHeroesExist called.." + JSON.stringify(this.heroesExist));
    return this.heroesExist;
  }

并在中使用它app.component class

  ngOnInit(): void {
    //this.getHeroes();
    this.heroesExist = this.heroService.doHeroesExist;
    console.log("app ngOnInit called...", this.heroesExist);

}

称为heroesExist()模板中的方法

<button (click)="heroesExist()">Do Heroes Exist?</button>

我对它的行为感到困惑。

When I click the Do Heroes Exist? button, I expect the console (and alert popup) to log "doHeroesExist called.. true", but instead it logs the entire body of the service function:

doHeroesExist 称为.. f () { console.log("doHeroesExist 称为..", this.heroesExist); Alert("doHeroesExist 称为.." + JSON.stringify(this.heroesExist)); 返回 this.heroesExist; }

为什么会发生这种情况?

为什么服务无法正确评估heroesExist = true;正如它在服务的构造函数中定义的那样?

笨蛋链接:https://plnkr.co/edit/MBEGkqnV5kie9PB3az9K?p=preview


当您传递该函数并稍后在另一个上下文中调用它时,this中的功能就丢失了。这就是为什么您会看到警报显示“doHeroesExist called.. undefined”,如下所示this您的服务方法中的 并不是指服务本身。

要解决这个问题,在将函数作为变量返回之前,将上下文绑定到它:

this.heroesExist = this.heroService.doHeroesExist.bind(this.heroService);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular:为组件字段提供对服务功能的引用并从模板调用它,但未按预期工作 的相关文章

随机推荐

  • 检查消息是否是从不起作用的 DM 通道类型发送的

    我正在使用 Discord js v12 并尝试检查消息是否是从 DM 发送的 但它对我不起作用 我尝试过以下方法 if msg channel type dm 几个月前这还可以 但现在就不行了 当我尝试时console log msg c
  • JNI - 如何使用具有不同字段的多个 Jni 包装器实例?

    背景 我有一个 android 项目 它使用 JNI 使用 NDK 以 Java 和 C C 进行编码 我在java端创建了一个Jni java包装器 它将自己完成所有Jni操作 而除了这个包装器之外 没有其他java类可以直接访问jni操
  • 需要整数吗?打开()

    我有一个非常简单的 python 脚本should扫描一个文本文件 其中包含格式为的行id value 并将它们放入字典中 python 模块名为 chval py 输入文件为 in txt 这是代码 import os sys from
  • 有没有一种通用的方法可以在 SQL 中生成任意线性序列?

    我可以做一个 SQL 查询来生成一个线性序列吗 1 2 3 4 5 6 7 x 1 or 2 7 12 17 22 2 5x 其中每个数字都是结果表的一行中的一个条目 SQL Server 和 Oracle 现在实现了 ANSI 标准 RO
  • Mongoose QueryStream 新结果

    我正在尝试设置猫鼬JS当另一个应用程序将新文档插入到集合中时 推出整个集合 或只是最新的项目 我以为查询流是要走的路 但是 当我启动简单的应用程序时 它会读出一次集合 然后将其关闭 当我插入新文档时 没有任何反应 假设连接不再打开并寻找新结
  • 使用 jaxb (unmarshal) 将 xml 转换为 java 对象

    我有以下 XML 我需要将其转换为 java 对象
  • 在 Twig 上执行闭包

    我正在尝试执行驻留在 Twig 模板上的数组内的闭包 您可以在下面找到我正在尝试的简化片段 Symfony controller funcs array conditional gt function obj return obj gt g
  • 字段列表中的未知列

    我正在尝试使用 Pascal 向 MySQL 插入一些信息 但是当我运行该程序时出现错误 字段列表中未知列 mohsen 这是我的代码 procedure TForm1 Button1Click Sender TObject var aSQ
  • 具有共享变量(值)的 Python 多处理 Pool.apply_async

    对于我的大学项目 我正在尝试开发一个基于 python 的流量生成器 我在 vmware 上创建了 2 台 CentOS 机器 我使用 1 台作为我的客户端 1 台作为我的服务器机器 我用过IP 别名仅使用单个客户端 服务器计算机来增加客户
  • 从长度不等列表的列表创建数据框

    我尝试转换这样的列表 l 1 2 3 17 4 19 5 到一个数据帧 其中每个数字作为索引 列表的位置作为值 例如 19 在第二个列表中 因此我希望得到某一行以 19 作为索引 1 作为值的行 依此类推 我设法得到它 参见下面的锅炉板 但
  • 在间隔内向两条线添加值时,图表移动不流畅

    我正在使用更新样条图来显示每秒变化的线 更改在chartinfo chart events load 中设置 下面是我在实际程序中使用的代码 chartinfo chart events load function powerLine th
  • 在 Mac Excel 2011 中从 Mysql DB 获取数据的 VBA 代码

    我在 Windows 中使用 ADODB 代码从 Mysql 数据库获取数据 并且工作正常 但是 我似乎无法让我的 Excel 工作簿 使用 ADODB 与 Excel Mac 2011 一起使用 经过大量谷歌搜索 我找到了来自 Actua
  • HTTR R,CURL,无法加载 PEM 证书?

    我正在尝试发出 API 请求 并将我的 SSL 证书传递给 GET 的 config 参数 我最初让它工作了几周 但后来不得不重新安装 R 我进行了全新安装 删除了所有文件夹 安装了 R RTools RStudio 在这个新的 R 实例中
  • 在哪里可以找到权威的 Selenium WebDriver 与 Firefox 兼容性表? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我在各种平台上使用 Selenium Java 和 Firefox Web Driver 参与过许多项目 我一次又一次地遇到我们使用的 Seleni
  • 在 R 中,在字符串中将大写字母切换为小写字母,反之亦然

    我对功能很熟悉toupper and tolower 但这并不完全给出我想要的东西 这是我拥有的字符串和我想要的字符串的示例 this This is the string THAT I have that tHIS IS THE STRI
  • cherry-pick 命令是否会生成同一提交的不同哈希码?

    我对樱桃采摘不太了解 只需要清除cherry pick命令在不同分支中生成相同提交的不同哈希代码 实际上 我正在挑选不同分支中的哈希码 在这里我注意到它正在生成现有提交的不同哈希代码 是它的工作流程还是这里存在任何问题 提交哈希不仅基于提交
  • 变量不会在颤动中动态更改文本

    我已经定义了我的应用程序 并且通过了counter变量作为构造函数 如下所示 class AppThreePlusThree extends StatelessWidget override Widget build BuildContex
  • 用PHP将EXIF写入JPG

    几天来 我尝试使用 PHP 在 JPG 图像中写入 或更新 EXIF 信息 地理标记 纬度和经度 在咨询了很多网站但没有成功之后 我认为最好的选择是使用Imagick 但是虽然我似乎可以使用setImageProperty 设置纬度和经度
  • rand() 返回相同的数字[重复]

    这个问题在这里已经有答案了 我正在使用 rand 在 C 中制作一个简单的示例 但尽管我使用 srand 但该函数始终返回相同的数字 这是代码 include
  • Angular:为组件字段提供对服务功能的引用并从模板调用它,但未按预期工作

    在我的 Plunker 里 修改的英雄之旅来自官方文档的应用程序 我在hero service doHeroesExist boolean console log doHeroesExist called this heroesExist