«Невозможно прочитать свойство 'pu sh' неопределенного» * ​​1001 * 9 компонента - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь создать вложенный массив в своем компоненте angular 9, чтобы я мог вызвать его в шаблоне. Я не уверен, проблема ли в форматировании или я что-то делаю в корне неправильно. Я все время получаю сообщение об ошибке: Cannot read property 'push' of undefined

Вот мой машинописный текст:

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

@Component({
  selector: 'ngx-analysis',
  templateUrl: './analysis.component.html',
  styleUrls: ['./analysis.component.scss']
})
export class AnalysisComponent implements OnInit {

    persuadables: [{'icon':string, 'desc':string, 'status':string}];

    constructor() { }

    ngOnInit() {
        this.persuadablePush();
    }

significance(score, name, arr){

        if (score == 1.0){
            arr.push({'icon':'checkmark-done-circle', 'desc': 'Very ' + name.toLowerCase(), 'status':'success'}) ;
        }
        else if (score == 0.5){
            arr.push({'icon':'checkmark-circle', 'desc':name, 'status':'info'}) ;
 
        }
        else if (score == 0.0){
            arr.push({'icon':'close-circle', 'desc': 'Not ' + name.toLowerCase(), 'status':'danger'}) ;

        }
    }
persuadablePush(){

        for( let i=5; i<10; i++ ){

            this.significance(
                this.insights['consumption_preferences'][0]['consumption_preferences'][i]['score'],// =number
                this.insights['consumption_preferences'][0]['consumption_preferences'][i]['name'],// =string
                this.persuadables
            )
        }
    }

, а вот мой HTML:

<nb-card size="small">
      <nb-card-header>Persuadables</nb-card-header>
      <nb-card-body>
        <nb-list *ngFor='let obj of persuadables'>
            <nb-icon icon='obj.icon' status='obj.status'></nb-icon>
            {{obj.desc}}
        </nb-list>
      </nb-card-body>
    </nb-card>

Спасибо за ваш помогите!

Ответы [ 2 ]

1 голос
/ 20 июня 2020

Я думаю, что вы ищете (либо должно работать)

export class AnalysisComponent implements OnInit {
    //persuadables: Array<{'icon':string, 'desc':string, 'status':string}> = [];
    //persuadables: {'icon':string, 'desc':string, 'status':string}[] = [];
}
0 голосов
/ 20 июня 2020

Я думаю, это произошло из-за того, что вы написали тип, но не определили массив.

Попробуйте вот так:

export interface Persuadable {
  icon: string;
  desc: string;
  status: string;
}
export class AnalysisComponent implements OnInit {
    public persuadables: Array<Persuadable> = [];
}

Используйте интерфейсы и инициализируйте свой массив.

...