【问题标题】:Bind a value on ngModel in another components Angular 7在另一个组件Angular 7中绑定ngModel上的值
【发布时间】:2019-06-30 07:06:09
【问题描述】:

假设我有这个组件:

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

@Component({
  selector: 'app-main',
  template: `<div class="border">
  <h1>Simple Date Converter</h1>
  <br>
  <br>
  <p>Input RFC-3339 Formatted Date:</p>

    <div id="in" class="block">
      <input #myInput [(ngModel)]="inputValue">
        <br> <br>
        <button class="btn" [routerLink]="['result']">Convert Date</button>

        <p>{{ inputValue | date:'EEEE, d MMMM, y' }}</p>
    </div>
  <br>
  <br>
</div>  `,
  styleUrls: ['./main.component.css']
})
export class MainComponent implements OnInit {

  constructor() { }

  ngOnInit() {
  }

}

然后当我单击按钮时,它应该路由到像这样的另一个组件

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

@Component({
  selector: 'app-result',
  template: `<div class="results">
  <h1>Simple Date Converter</h1>
  <br> <br>
  <p>Converted result</p>
  <br><br>
  <p>{{ inputValue | date:'EEEE, d MMMM, y' }}</p>
  <br>
  <a routerLink="">back to main page</a>
  </div>`,
  styleUrls: ['./result.component.css']
})
export class ResultComponent implements OnInit {

  constructor() { }

  ngOnInit() {
  }

}

问题是我如何在另一个组件(如结果组件)的第一个组件上绑定/使用“inputValue”上的值,有些人建议我使用事件发射器,但它对我不起作用,我我是 Angular 7 的新手,所以我不知道语法是否错误或其他任何问题,所以我决定在这里显示整个组件,也许你们可以了解情况

【问题讨论】:

  • 你能指导我如何或有一个教程我可以学习吗?
  • 点击Convert Date会发生什么?
  • 它路由到 ResultComponent

标签: html node.js angular typescript angular7


【解决方案1】:

两个组件可以通过多种方式进行通信:

  • 服务
  • 一些商店 (ngrx)
  • 输入/输出
  • 通过路由器传递状态(例如查询参数、参数、状态)
  • ...

在您的情况下,它们没有父/子关系,因为它们是路由组件,因此您不能使用输入/输出,但您可以使用其他所有内容。

在您的情况下,我建议在导航时传递状态。

<button class="btn" [routerLink]="['result']" [state]="{inputValue: inputValue}">Convert Date</button>

然后你就可以访问第二个组件中的状态了:

export class ResultComponent implements OnInit {
    inputValue;

    ngOnInit(): void {
        this.inputValue = history.state.inputValue;
    }
}

【讨论】:

  • 我试过了,但是 ngOnInit(): void { this.inputValue = history.state.inputValue;给出错误“消息”:“类型'ResultComponent'上不存在属性'inputValue'。”
  • 你必须将它添加到组件中,我已经更新了答案
  • 现在它没有给出错误,但我可以将状态用于结果组件上的 html 标记,如

    {{ inputValue }}

    吗?跨度>
  • 当然,组件中的每个公共属性都可以在模板中访问
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-02
  • 1970-01-01
  • 2021-12-01
  • 2020-09-12
  • 2019-03-07
相关资源
最近更新 更多