【问题标题】:error: Object literal may only specify known properties in angular错误:对象文字只能以角度指定已知属性
【发布时间】:2020-02-17 10:47:24
【问题描述】:

我为这个错误快疯了:

Object literal may only specify known properties, and 'brand' does not exist in type 'BrandCB[]'.

我不知道发生了什么。如何解决这个问题? 这是代码: gallery.component.ts

import { CarsService } from '../services/cars.service';
import { Car } from './../models/car';
import { Component, OnInit } from '@angular/core';
import { BrandCB } from '../models/brandCB';

@Component({
  selector: 'app-gallery',
  templateUrl: './gallery.component.html',
  styleUrls: ['./gallery.component.css']
})
export class GalleryComponent implements OnInit {

  cars:Car[];
  brands:BrandCB[];
  selectedBrand:string;
  observableCars;
  observableBrands;

  constructor(public carsService: CarsService) { 

  }

  ngOnInit() {
    this.getCars('all');
    this.observableBrands = this.carsService.getBrands().subscribe( (data:any) => {
      this.brands = {brand:data['brand'], checked:'false'}; //this is the error row
      console.table(data);
    });
  }

  onOptionsSelected(event: { target: { filter: any; }; }){
    this.getCars(this.selectedBrand)
  }

  getCars(filter){

    this.observableCars = this.carsService.getCars().subscribe(data => {

      if(filter!="all"){
        this.cars = data.filter( car => car.brand == this.selectedBrand);
      }else{
        this.cars = data;
      }

    });
  }

  a(event){
    let name = event.target.name;
    let checked = event.target.checked;

    if(name=='all'){
      if(checked==true){
        //uncheck tutti gli altri
      }
    } else {
      // filtra in base alle caselle checked
        // crea un array di checked items
    }

  }

  ngOnDestroy(){
    this.observableCars.unsubscribe();
    this.observableBrands.unsubscribe();
  }
}

brandCB.ts

export class BrandCB {
    brand:any;
    checked:boolean;
}

StackOverflow 告诉我,我的帖子主要是代码,我应该写点别的,所以我在做,bla bla bla 和更多 bla bla bla。你看到外面的事故了吗?

【问题讨论】:

  • 错误发生在哪一行。这真的是您可以创建以重现您的问题的最小代码吗?
  • 我是cmets签的,看ngOnInit
  • 您正在将一个对象分配给一个数组。
  • 您已将品牌定义为一个数组。如果您希望数组中的第一个值等于该对象,请尝试this.brands[0] = {brand:data['brand'], checked:'false'};。或者更有可能遍历您的数据并根据需要将对象推送到数组中。
  • @ritaj 我认为这不是问题,brands[] 是一个对象数组

标签: angular typescript


【解决方案1】:

我解决了。

this.observableBrands = this.carsService.getBrands().subscribe( (data:any) => {
  for(let x=0;x<data.length;x++){
    this.brands.push(new BrandCB(data[x].brand, false));
  }
});

【讨论】:

    【解决方案2】:

    正如您的错误行所示,您正在尝试将一个对象分配给数组。基本上你需要将你的brandData推入brands数组而不是分配它。

    试试这条线

    this.brands = [{brand:data['brand'], checked:'false'}];
    

    这会将您的品牌数据设置为数组的第一个元素。但是由于您的服务方法名称是“getBrands”,您确定只有一个品牌值会从服务中返回而不是数组吗?

    【讨论】:

      猜你喜欢
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 2019-05-14
      • 2018-09-06
      • 2015-10-27
      • 1970-01-01
      • 2019-08-13
      • 2019-12-03
      相关资源
      最近更新 更多