【问题标题】:Angular 2 cannot access classes functionsAngular 2 无法访问类函数
【发布时间】:2017-06-20 18:14:23
【问题描述】:

我有一个 Known 类,其中有一个名为 checkRev 的函数,但是当我尝试在 onNgInit 上使用它时,它说“this.known.checkRev 不是一个函数”

我的班级:

export class Known {
   constructor(args...){}
   public checkRev(){
    code...
   }
}

我的组件

export class KnownItem implements OnInit {
@Input('userInfo') known: Known;
ngOnInit(){
   this.known.checkRev();
}

@编辑 我通过输入传递已知对象

<sh-known-item *ngFor="let known of knowns" [userInfo]="known"></sh-known-item>

已知数组

private knowns: Array<Known> = [];

推入数组

this.knowns.push(new Known(args..));

@编辑 2 我在 checkRev() 中有代码,它太长了,不能放在这里

【问题讨论】:

  • console.log out this.known 看看实际传递了什么。
  • 不确定但你试过@Input() known: Known;,你是如何传递已知变量的?
  • 我认为你应该使用 ngOnChange 函数。您必须确定,当您在其上调用方法时,该 Known 对象已经被传递。
  • 但每次更改都会再次运行该函数,对吗?
  • 你的“已知”数组是什么样子的?

标签: angular typescript


【解决方案1】:

您需要为Known 提供一些属性,无论您需要什么,您都必须具备能够对该对象执行功能的东西。

因此,例如,您的课程应如下所示:

export class Known {

    name: string

   constructor(name: string){
       this.name = name;
   }
   public checkRev(){
     console.log('fired!')
   }
}

那么您的代码应该可以正常工作。测试了一下,效果很好!这里有一个 工作plunker

【讨论】:

  • 有没有代码都无所谓,就是不能识别为函数就是问题
  • 稍微更新了类,以在对象中实际具有值。包括在内,工作 plunker。
  • 卢卡斯,这个答案对你有帮助吗? :)
  • 我现在正在更新其他内容.. 稍后再看.. 但你说得对,这应该有效,这就是我正在做的..
  • AJT 现在它正在工作,不知道为什么反射式注射器或 ng serve 没有检测到更改,无论如何如果它再次发生,我将编辑帖子,现在它的回答。
【解决方案2】:

你实际上不需要将它作为输入传递,你可以在构造方法中实现它,比如

export class KnownItem implements OnInit {
  constructor (private known: Known){}
  ngOnInit (){
    this.known.checkRev()
  }
}

【讨论】:

  • @LucasBertollo 是已知的定义,例如this.knowns = [new Known()] 你能把它添加到你的答案中吗?
  • @LucasBertollo 尝试将 ngOnInit 替换为 ngAfterContentChecked
  • 同样的错误,没有工作 "TypeError: this.known.checkRev is not a function"
猜你喜欢
  • 1970-01-01
  • 2016-12-10
  • 2017-10-13
  • 1970-01-01
  • 2019-01-05
  • 2018-02-17
  • 2017-12-10
  • 1970-01-01
  • 2018-01-31
相关资源
最近更新 更多