Angular2 实例绑定方法不能作为钩子使用

2024-01-24

通过使用实例绑定方法实现 ngOnInit() 钩子,但它停止工作......

简化示例:

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

  @Component({
    selector: 'my-app',
    template: '<h1>Hello {{name}}</h1>'
  })
  export class AppComponent { 
    name = 'Angular'; 
    
    ngOnInit = () => {
      this.name = 'World';
    }
  }

预期结果=>“Hello World” 真实结果=>“Hello Angular”

是否在某处描述了这些方法不允许完全用于钩子?或者这样使用它们有什么问题?

实例:https://plnkr.co/edit/aZ1CYkDn06KUENmDW3a3?p=preview https://plnkr.co/edit/aZ1CYkDn06KUENmDW3a3?p=preview

重要的:问题不是如何解决。我知道我可以改为ngOnInit() {}。问题是 -为什么实例绑定方法不能作为钩子使用

跟进在 Angular 存储库中创建了一个问题 - 改进行为/文档/错误通知:https://github.com/angular/angular/issues/16478 https://github.com/angular/angular/issues/16478估计会有更明确的答案。在明确/确认行为是通过设计仅检查类原型后,将在此处发布。


它应该是

ngOnInit() {
    this.name = 'World';
}

想象一下你正在覆盖默认循环

固定插头:https://plnkr.co/edit/DGkNulwYs4WpYULhl9gD?p=preview https://plnkr.co/edit/DGkNulwYs4WpYULhl9gD?p=preview

Note:

正如文档中所述,实现生命周期挂钩是可选的。因为javascript没有接口

Source: https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html#!#interface-可选 https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html#!#interface-optional

Edit:

您所做的只是在组件内创建一个名为的函数ngOnInit如果你想执行它,你必须在组件内的某个地方执行它。最好的地方似乎是构造函数:

constructor(){
    this.ngOnInit();    
}

固定插头:https://plnkr.co/edit/NAHX5vfoMXtN95Y0oyOR?p=preview https://plnkr.co/edit/NAHX5vfoMXtN95Y0oyOR?p=preview

Edit2:

这是原型的证明:

With the way you do it, the function will not be a part of the prototype chain of the component base class (line 17): function

But this way Angular will see it as a part of the prototype chain (line 15): prototype

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

Angular2 实例绑定方法不能作为钩子使用 的相关文章

  • 观众:覆盖单个测试的提供者(角度通用)

    我构建了一个小型角度应用程序 现在正在编写单元测试 到目前为止一切顺利 但是当我尝试测试我的 authGuard 时 我遇到了一些问题 我在用观众 https github com ngneat spectator 我在规范的提供者部分中提
  • 如何在角度材料的下拉菜单中显示表单?

    我想展示一个简单的form 如下图所示 作为dropdown当icon被点击 我查看了角材料的组件列表 但找不到任何合适的组件 有menu https material angular io components menu overview
  • 如何调试超时等待异步 Angular 任务?无法在角度页面上找到元素

    编辑 请注意 在 ernst zwingli 的帮助下 我找到了问题的根源 因此 如果您遇到相同的错误 他指出的修复之一可能会帮助您 我的问题是量角器本身的一个已知问题 如果您认为这可能是您 我已经扩展了我的步骤 以在我最初的问题之后查明问
  • `[(ngModel)]` 与 `[(value)]`

    有什么区别
  • Angular firestore 查询 firestore 文档

    我有以下查询 selectedUser AngularFirestoreDocument
  • Angular 2 Material 2 日期选择器日期格式

    我不知道如何更改材料2日期选择器的日期格式 我已阅读文档 但我不明白我实际上需要做什么 datepicker默认提供的输出日期格式为f e 6 9 2017 我想要实现的目标是将格式更改为类似的格式9 Jun 2017或任何其他 文档htt
  • Angular 5 Http拦截器刷新JWT令牌

    我已经实现了令牌保存 检索的逻辑 并且我也有刷新调用 问题是 当我在 HttpInterceptor 中拦截 403 时 同时进行的其他调用也会刷新令牌 我很乐意保留这些调用 直到我的令牌刷新为止 创建我所说的请求 信号量 Injectab
  • 原生元素聚焦功能不起作用

    我试图通过单击按钮自动聚焦在输入元素上 请参阅打字稿 ViewChild envFilter envFilter ElementRef onFilterSelect this envFilter nativeElement focus 在
  • 如何在 Angular 项目中使用 Bootstrap?

    我开始我的第一次Angular应用程序和我的基本设置已完成 我怎样才能添加引导程序我的申请 如果您可以提供一个示例 那么这将是一个很大的帮助 如果您使用Angular CLI要生成新项目 还有另一种方法可以使 bootstrap 可访问角度
  • Angular 7:ng 测试挂起,不断重复运行测试

    我最近将 Angular 6 应用程序迁移到角7 my 包 json看起来像这样 name myApp version 3 0 0 license MIT scripts ng ng start ng serve public host h
  • 如何使用深度等于 (Angular 7)

    通过 VS Code 自动导入 import deepEqual require deep equal 不起作用 错误 TS1202 定位时无法使用导入分配 ECMAScript 模块 考虑使用 import as ns from mod
  • 当应用程序位于前台时,Angular 8 firebase 推送通知不起作用

    我正在按照此文档在我的 Angular Web 应用程序上实现 FCM 当我发送通知时 当应用程序未处于活动状态时 它会成功接收 接收后台通知 但如果应用程序处于活动状态 我就不会收到通知 请按照下列步骤操作 https dev to ma
  • Angular 提供的服务在 VS forRoot 中

    我想知道这两个代码块是否等效 我可以用吗providedIn与以下结果相同forRoot Injectable providedIn root export class MyService constructor vs Injectable
  • 无法读取未定义的“触及”属性

    为什么我会收到此错误无法读取未定义的属性 为什么无法读取formName controls email touched但它能够阅读formName get custDetails touched
  • 如何让 vsCode 了解自动补全的深度依赖导入?

    我创建了多个角度库 让我可以使用一堆组件更快地创建网站 例如 sidenav 卡片 我创建了一个 超级库 来导入所有这些库 这样我就可以使用npm i myWebsiteBundle立即下载所有依赖项 我已将每个类似的插件列入白名单ng p
  • 如何更改服务器端口3000?

    我刚刚结束了 Angular 2 的教程 我找不到将 localhost 端口从 3000 更改为 8000 的方法 在我的package json文件中有一行 start concurrent npm run tsc w npm run
  • Plesk Windows 部署 Node.js

    我创建了一个以 Node js 作为后端的 Angular 项目 这是服务器文件结构 Home directory httpdocs node hm dist browser folder server folder server js p
  • Angular 4 与 Webpack 2,动态加载脚本

    我刚刚在一个项目中尝试使用 Angular 4 和 Webpack 2 我试图在 ngOnInit 期间加载一些脚本 但遇到了一些问题 问题1 我的 ngOnInit 中有以下代码 System import node modules jq
  • 如何在 Angular 中从父组件访问子组件?

    I have mat paginator在子组件a中 如下所示 子组件 html
  • ngmodel与Angular2中复选框的动态数组绑定

    我有一个 Angular 2 组件 其中我从数组生成复选框列表 现在我需要根据选中的复选框填充不同的数组 这应该是双向绑定 这意味着如果复选框的值已在数组中 则必须已经检查了复选框 我在 Angular 1 中使用了一个名为 checkli

随机推荐