为了账号安全,请及时绑定邮箱和手机立即绑定

在组件之间传递数据不起作用 Angular

在组件之间传递数据不起作用 Angular

阿晨1998 2022-01-07 18:43:58
我有一个问题,我正在尝试将playlist[]数组从 component.ts传递给 header.ts。ERROR TypeError: Cannot read property 'length' of undefined下面的代码:组件.tsimport { Component, OnInit } from '@angular/core';import { ApiService } from '../../../services/api.service';import { FormGroup, FormControl } from '@angular/forms';import { FormBuilder } from '@angular/forms';import { faSearch } from '@fortawesome/free-solid-svg-icons';import { faRedo } from '@fortawesome/free-solid-svg-icons';import { faHeadphones } from '@fortawesome/free-solid-svg-icons';import { faExternalLinkAlt } from '@fortawesome/free-solid-svg-icons';import { faPlus } from '@fortawesome/free-solid-svg-icons';@Component({  selector: 'app-content',  templateUrl: './content.component.html',  styleUrls: ['./content.component.scss']})export class ContentComponent {  public data = [];  public playlist = [];  public apiData: any;  public results = [];  public loading = false;  public noData: any;  p: number = 1;  faSearch = faSearch;  faRedo = faRedo;  faHeadphones = faHeadphones;  faExternalLinkAlt = faExternalLinkAlt;  faPlus = faPlus;  searchQuery: string = "";  clickMessage = '';  constructor(private service: ApiService) { }  getAll() {    this.service.getAll(this.searchQuery).subscribe((results) => {      this.loading = true;      console.log('Data is received - Result - ', results);      this.data = results.results;      this.loading = false;      if (this.data.length <= 0) {        this.noData = true;      } else if (this.data.length >= 1) {        this.noData = false;      } else {        this.noData = false;      }    })  }  closeAlert() {    this.noData = false;  }  addSongToPlaylist(itunes) {    this.playlist.push(itunes);    console.log('Playlist - ', this.playlist);}  refresh(): void {    window.location.reload();  }
查看完整描述

2 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

你的问题是里面的对象playlist和开始的一样。尝试克隆对象并将新项目添加到克隆项目中:


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

import { ApiService } from '../../../services/api.service';

import { FormGroup, FormControl } from '@angular/forms';

import { FormBuilder } from '@angular/forms';

import { faSearch } from '@fortawesome/free-solid-svg-icons';

import { faRedo } from '@fortawesome/free-solid-svg-icons';

import { faHeadphones } from '@fortawesome/free-solid-svg-icons';

import { faExternalLinkAlt } from '@fortawesome/free-solid-svg-icons';

import { faPlus } from '@fortawesome/free-solid-svg-icons';


@Component({

  selector: 'app-content',

  templateUrl: './content.component.html',

  styleUrls: ['./content.component.scss']

})

export class ContentComponent {


  public data = [];

  public playlist = [];

  public apiData: any;

  public results = [];

  public loading = false;

  public noData: any;

  p: number = 1;

  faSearch = faSearch;

  faRedo = faRedo;

  faHeadphones = faHeadphones;

  faExternalLinkAlt = faExternalLinkAlt;

  faPlus = faPlus;


  searchQuery: string = "";

  clickMessage = '';


  constructor(private service: ApiService) { }


 ...

  addSongToPlaylist(itunes) {

    const playlistSong = {...this.playlist};

    playlistSong.push(itunes);

    this.playlist = playlistSong;

    console.log('Playlist - ', this.playlist);

  }

 ...

}


查看完整回答
反对 回复 2022-01-07
?
呼如林

TA贡献1798条经验 获得超3个赞

您需要从组件输出播放列表,然后将其分配给页面组件中的变量,然后可以将其传递给应用程序标题:


<app-header [playlist]="playlist"></app-header>

<app-content [playlistOutputEvent]="playlist = $event;"></app-content>


查看完整回答
反对 回复 2022-01-07
  • 2 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号