javascript - 错误 TypeError : _v. context.$implicit.toggle 不是函数

标签 javascript angular typescript angular5

我正在使用以下代码在 angular4 中测试一个简单的递归 Treeview 组件。但是每当我尝试在 toggle() 上扩展 subview 时。

我遇到异常错误:

ERROR TypeError: _v.context.$implicit.toggle is not a function

谢谢

tree-view.component.ts

export class TreeViewComponent implements OnInit {  
  constructor() { }
  ngOnInit() {}     
  @Input() directories: Directory[];
}

TreeView .component.html

<ul>
  <li *ngFor="let dir of directories">
    <label (click)="dir.toggle()"> {{ dir.title }}</label>
    <div *ngIf="dir.expanded">
      <tree-view [locations]="dir.children"></tree-view>
    </div>
  </li>
</ul>

目录.ts

 export class Directory{

      title: string;
      children: Directory[]
      expanded = true;
      checked = false;

  constructor() {

  }

  toggle() {
    this.expanded = !this.expanded;
  }

  getIcon() {
    if (this.expanded) {
      return '-';
    }
    return '+';
  }
}

最佳答案

正如 yurzui 所建议的,如果您只是键入 您的数据,您没有类实例,因此方法toggle 不可用。如果你真的想让你的数组包含你的 Directory 类的实例,将属性添加到构造函数,当你从 api 获取数据时,创建你的对象的实例,所以缩短版本:

export class Directory {
  title: string;
  expanded: boolean;

  constructor(title: string, expanded: boolean) {
    this.title = title;
    this.expanded = expanded 
  }
}

并在您的 api 调用中:

return this.httpClient.get<Directory[]>('url')
  .map(res => res.map(x => new Directory(x.title, x.expanded)))

现在您可以访问 toggle 方法了。

StackBlitz

关于javascript - 错误 TypeError : _v. context.$implicit.toggle 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47464337/

相关文章:

Javascript 错误 - 无法调用 null 的方法 'appendChild'

javascript - 如何使用变换更改或移动图像?

Angular 10 Swagger Codegen : Generic type ModuleWithProviders<T> requires 1 type argument(s)

arrays - 如何从 Angular2(Typescript) 中的 Json 数组中获取值的总和

javascript - 如何在不覆盖另一个同名对象的情况下创建一个空的命名空间对象?

javascript - 使用 d3.js 拼出多层饼图效果

javascript - Angular 2服务从组件调用方法

node.js - 使用 module=system 为 Node 设置 TypeScript 不起作用

javascript - 标记聚类器不是构造函数

javascript - Angular 选择器组件生命周期 - ngoninit/ngondestroy/等。如果嵌套在另一个之下,则会被触发。这种行为可以避免吗?