无法从模型

时间:2019-07-26 14:27:26

标签: javascript html arrays angular typescript

我正在尝试发出从我的Model.ts文件生成的名为name的数组的Model[]属性。当我尝试将其用于我的app.component时,它说属性'名称'在类型Model[]上不存在。这很奇怪,因为我的模型中存在name:string属性。也许我认为错了,还有另一个错误可以帮助我解决这个问题,究竟是什么错误?

Model.ts

export class Model
{
   name:string;
   constructor(name:string)
   {
       this.name=name;
   }
}

favorite.component.ts

export class FavoriteComponent implements OnInit {
  items:Model[]= [new Model('Page-1'),new Model('Page-2'),new Model('Page-3')];
  @Output() myArray = new EventEmitter<Model>();
  //@Output() featureSelected=new EventEmitter<string>();
  constructor() { }
   onSelect()
   {
    // console.log(feature);
    this.myArray.emit(this.items.name); //mistake is here on this parameter.
  }
  ngOnInit() {
  }

}

favorite.component.html

<nav class="navbar navbar-inverse navbar-fixed-top">
  <div class="container-fluid">
    <div class="navbar-header">
      <a class="navbar-brand" href="#">WebSiteName</a>
    </div>
    <ul class="nav navbar-nav">
      <li class="active"><a href="#">Home</a></li>
      <li  *ngFor="let item of items">
          <a href="#" (click)="onSelect('[item.name]')">{{item.name}}</a>
        </li>
    </ul>
  </div>
</nav>

3 个答案:

答案 0 :(得分:1)

在您的html中,将该项目传递给onSelect方法。

<li  *ngFor="let item of items">
  <a href="#" (click)="onSelect(item)">{{item.name}}</a>
</li>

在您的component.ts中:

onSelect(modelItemSelected: Model)
{
  this.myArray.emit(modelItemSelected); //mistake is here on this parameter.
}

表达您的想法:

  

它说属性'name'在Model []类型上不存在

是的,您的属性“名称” 存在于 Model 类型上,但不存在于 Model [] 类型上模型的数组。

答案 1 :(得分:0)

不确定代码的其余部分,但需要数组索引。

spark.read.option
<nav class="navbar navbar-inverse navbar-fixed-top">
  <div class="container-fluid">
    <div class="navbar-header">
      <a class="navbar-brand" href="#">WebSiteName</a>
    </div>
    <ul class="nav navbar-nav">
      <li class="active"><a href="#">Home</a></li>
      <li  *ngFor="let item of items;let i=index">
          <a href="#" (click)="onSelect(i)">{{item.name}}</a>
        </li>
    </ul>
  </div>
</nav>

答案 2 :(得分:0)

请牢记这两点

  1. 如果您希望发出名称,请从以下位置更改EventEmitter的类型 在字符串中发出或发出Model类型并读取name属性的模型 父组件
  2. 您必须在数组中找到特定项。我已经将其硬编码为索引[0],但是您可以根据使用情况选择任何索引。

    export class FavoriteComponent implements OnInit {
    
    items: Model[] = [
    new Model('Page-1'),
    new Model('Page-2'),
    new Model('Page-3')
    ];
      @Output() myArray = new EventEmitter<Model>();
      @Output() selectedmodelname = new EventEmitter<string>();
     constructor() { }
     onSelect() {
        this.myArray.emit(this.items[0]);
        this.selectedmodelname.emit(this.items[0].name);
      }
      ngOnInit() {
      }
    

我希望它会有所帮助。