javascript - 以 Angular 将数据从一个组件传递到另一个组件

标签 javascript arrays angular typescript components

我正在开发一个包含搜索功能的应用程序。

现在我在应用程序中有 2 个组件 1.导航栏 2.搜索网格列表

导航栏组件包含一个文本框,您可以在其中输入搜索查询并按回车键,该组件将调用 API 并获取数据。 当数据返回时,我想将此数据填充到 SearchGridList 组件的数组中。

我很难理解 Angular 中组件内的数据传递,有人可以看看我的代码并指导我吗。

navbar.component.ts

import { Component, OnInit, Input, Output } from '@angular/core';
import {DataService} from '../../services/data.service';
import {SearchResults} from '../class/search.class';
import {SearchGridListComponent} from '../search-grid-list/search-grid-list.component';
import { EventEmitter } from '@angular/core';

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

  searchQuery : String;
  //searchResultList : Array<any> = [];

  constructor(private dataService :  DataService) { }

  doSearch () : any
  {
    this.dataService.doSQLSearch(this.searchQuery)
    .then ((data:any)=>{
      for (var i =0; i<data.Results.length;i++){
        let searchObj = new SearchResults(data.Results[i]);
        //I want to push data into array from SearchGrid like this 
        resultGridList.push(searchObj);

      }
    });
   }

  ngOnInit() {
  }
}

navbar.component.html

<mat-toolbar class="main-header">
  <a href="/">
  <img src="../../../assets/vms-header-logo.png" id= "header-logo">
  </a>
    <form class="search-box">
      <mat-form-field  class="search-box-full-width">
        <input id ="search-textbox" matInput placeholder="Enter a Barcode, DSID or any search term" name="Search" [(ngModel)]="searchQuery" (keyup.enter)="doSearch()" autocomplete="off">
      </mat-form-field>
    </form>
</mat-toolbar>

search-grid.component.ts

import { Component, OnInit, Input } from '@angular/core';
import {NavbarComponent} from '../navbar/navbar.component';

@Component({
  selector: 'app-search-grid-list',
  templateUrl: './search-grid-list.component.html',
  styleUrls: ['./search-grid-list.component.css'],
})
export class SearchGridListComponent implements OnInit {
  resultGridList : Array <any> = [];
  constructor() { }

  ngOnInit() {
  }

}

最佳答案

您可以在您的 DataService 中创建一个 BehaviorSubject

private messageSource = new BehaviorSubject<string>('service');

您可以引用此演示以在组件之间传递数据。

https://stackblitz.com/edit/behavior-subject-2019

关于javascript - 以 Angular 将数据从一个组件传递到另一个组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55125640/

相关文章:

javascript - Rails Controller 到 ajax

javascript - jQuery 照片网格没有达到预期的效果

java - Java 2D数组大小更改错误

c# - 如何在 C# 中的二维数组中获取内部数组的长度?

angular - 如何将 ngx-bootstrap 安装到我的 angular 4 项目中

javascript - JSF。如何将JavaScript函数的值设置为Bean的字段?

javascript - 从 JavaScript for Automation (JXA) 脚本退出 Mac 应用程序

java - 如何将 String.split 与文本文件一起使用以添加到简单数组

angular - 对于大部分相似但地方不同的组件,Angular 的最佳实践是什么?

css - Angular2 嵌套可见性