Angular:将参数传递给另一个组件

2024-02-15

我被 Angular2 困住了,我想从 a 传递参数产品页面(例如:产品 ID)到支付页面,这是我迄今为止尝试过的:

付款.html:

  Message: {{message}}
  <page-products></page-products>

付款.ts:

import { Component, ViewChild, AfterViewInit} from '@angular/core';
import { ProductsPage } from "../../products/products";

@IonicPage()
@Component({
    selector: 'page-payment',
    templateUrl: 'payment.html'
})
export class PaymentPage implements AfterViewInit {

     @ViewChild(ProductsPage) child;

     constructor(public navCtrl: NavController) {}

     message:string;

     ngAfterViewInit() {
             this.message = this.child.message
     }
    }

产品.ts:

import { Component} from '@angular/core';
import { IonicPage, NavController } from 'ionic-angular';

@IonicPage()
@Component({
    selector: 'page-products',
    templateUrl: 'products.html',
})
 export class ProductsPage {

     message: string = "Hola Mundo!"

     constructor(public navCtrl: NavController) {}

     goToPayment() {
         this.navCtrl.setRoot('PaymentPage');
     }
 }

产品.html:

<button ion-button (click)="goToPayment()">pay</button>

但我总是收到此错误消息:

知道我做错了什么吗?


这是我的 payment.module.ts:

import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { ComponentsModule } from '../../../components/components.module';
import { PaymentPage } from './payment';
import { ProductsPage } from '../../products/products';

@NgModule({
   declarations: [
       PaymentPage, ProductsPage  <-- if I add here ProductsPage, then new error (see under)
   ],
   imports: [
        IonicPageModule.forChild(PaymentPage),
        ComponentsModule
   ]
})
export class PaymentPageModule {}

和 products.module.ts :

import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { ProductsPage } from './products';
import { ComponentsModule } from '../../components/components.module';

@NgModule({
   declarations: [
      ProductsPage
   ],
   imports: [
      IonicPageModule.forChild(ProductsPage),
      ComponentsModule
  ]
})
export class ProductsPageModule {}

如果我像上面那样声明 ProductsPage ,那么我会收到以下错误消息:


要在没有层次关系的组件之间传递参数,您应该使用服务。为此,首先创建服务:

import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';

@Injectable()
export class MyService {

  private messageSource = new BehaviorSubject<type_of_the_message>(message);
  currentMessage = this.messageSource.asObservable();

  constructor() { }

  sendMessage(message: type_of_the_message) {
    this.messageSource.next(message);
  }

}

然后在发送者组件中:

    import { Component, OnInit } from '@angular/core';
    import { MyService } from 'pathToService/MyService.service';

    @Component({
      selector: 'sender',
      templateUrl: 'senderTemplate',
      styleUrls: ['senderStyles']
    })
    export class SenderComponent implements OnInit {

      private message: type_of_the_message;

      constructor(private myService: MyService) {}

      ngOnInit() {
        this.myService.currentMessage.subscribe(message => this.message = message);
      }

      sendMessage() {
        this.myService.sendMessage(!this.message);
      }
    }

最后在接收器组件中:

import { Component, OnInit } from '@angular/core';
import { MyService } from 'pathToService/MyService.service';

@Component({
  selector: 'receiver',
  templateUrl: 'receiverTemplate',
  styleUrls: ['receiverStyles']
})
export class ReceiverComponent implements OnInit {

  private message: boolean;

  constructor(private myService: MyService) {}

  ngOnInit() {
    this.myService.currentMessage.subscribe(message => this.message = message);
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular:将参数传递给另一个组件 的相关文章

随机推荐

  • 导入文本文件时跳过空文件

    我有一个包含大约 700 个文本文件的文件夹 我想要导入这些文件并向其中添加一列 我已经弄清楚如何使用以下代码来做到这一点 files list files pattern c txt DF lt NULL for f in files d
  • Pandas 交叉表和计数

    我正在使用 Python 熊猫 我有一个带有字符串的列 我想在列之间进行交叉 例如我有以下输入 1 Andi 2 Andi Cindy 3 Thomas Cindy 4 Cindy Thomas 我想要以下输出 因此 安迪和托马斯的组合没有
  • Scala 参与者与非参与者交互(或将消息从参与者同步到 servlet)

    我有以下 scala 代码 package dummy import javax servlet http HttpServlet HttpServletRequest gt HSReq HttpServletResponse gt HSR
  • 异常在构造函数 try 块中捕获并处理,但仍会再次重新抛出

    我试图更好地理解处理继承时的抛出 捕获机制 我试图解决的问题是 如果在构造派生类时 首先构造的基类抛出异常 将会发生什么情况 include
  • CSS Margin: 0 未设置为 0

    我是网页设计的新手 我使用 CSS 和 HTML 创建了网页布局 如下所示 问题是 即使我将边距设置为 0 上边距也没有设置为 0 并留下了一些空间 我怎样才能清除这个空白区域 问题的屏幕截图 样式表
  • 使用 php 为 apache 日志设置 REMOTE_USER

    在 mod perl 中我可以做类似的事情 r gt user username 然后用户名将显示在日志的用户名部分中 有没有办法在 php 中做到这一点 无需修改apache Edit 到目前为止我已经尝试过两种 SERVER REMOT
  • 为什么 string.split() 结果包含未定义?

    我想在其中一个上分割一个字符串 d or n 我能够成功地分割这两者之一 但不能同时分割 gt msg foo 1 bar n baz 2 gt msg split d foo 1 bar baz 2 gt msg split n foo
  • 在 POST 负载中使用环境变量

    我可以在我发布的有效负载中使用先前测试中设置的环境变量吗 eg POST list some key environment saved value 是的 你可以这么做 你这样发送 some key environment variable
  • Python print 语句在参数之间添加空格

    我正在编写一个非常基本的 hello 程序 但我在名称和第一个感叹号之间不断出现空格 而我在代码中没有看到该空格 我尝试用几种不同的方式重新格式化字符串部分来连接间距 但我无法弄清楚是什么导致了额外的空间 我尝试过单独使用感叹号 或者将其作
  • 在 CUDA 内核中声明变量

    假设您在 CUDA 内核中声明一个新变量 然后在多个线程中使用它 例如 global void kernel float delt float deltb int i blockIdx x blockDim x threadIdx x fl
  • 为数据类型定义自己的 Ord

    我正在尝试制作一些数据结构来解决图形难题 我正在尝试定义边缘的比较标准 但我不确定如何定义 迄今为止 data Edge Edge Set String Bool 如果边缘具有相同的字符串集 并且相等与布尔值没有任何关系 我如何 通知 编译
  • unordered_map 具有三个元素

    我试图在一个元素中包含三个元素unordered map 我尝试了以下代码 include
  • 如何解除对 Java 启动进程的阻止?

    当从命令行执行某些命令 比如说 x 时 我收到以下消息 按任意键继续 因此它会等待用户输入来解锁 但是当我从 java 执行相同的命令 x 时 Process p Runtime getRuntime exec cmd null cmdDi
  • C# 数组的协变和逆变 [重复]

    这个问题在这里已经有答案了 在阅读一本section http en wikipedia org wiki Covariance and contravariance 28computer science 29 Arrays在维基百科上一篇
  • Html IFrame 标签未在电子邮件正文中解释

    我需要在电子邮件正文中发送一个 html 文件 其中包含 iframe 该 html 文件在浏览器中工作正常并播放视频 但是当我在电子邮件正文中发送它时 iframe 标记不会被解释 因此不会表现在身体上 这是 html 文件 b Aman
  • 分配给位置参数[重复]

    这个问题在这里已经有答案了 如何在 Bash 中为位置参数赋值 我想为默认参数分配一个值 if z 4 then 4 3 fi 表明4不是命令 The set内置是设置位置参数的唯一方法 set this is a test echo 1
  • Scylladb:聚类键笛卡尔乘积大小 600 大于最大值 100

    我正在使用 data stax java 驱动程序来查询 scylladb 我在从 scylla 读取数据时看到此错误 RequestHandler ip 9042 回复服务器错误 集群键笛卡尔乘积大小 600 大于最大值 100 连接失效
  • Node.js - 服务器关闭了连接?

    我正在 Node js 服务器上运行一个 Web 应用程序 并且需要它始终在线 因此我将永远使用它 但这是我在一段时间后得到的结果 Error Connection lost The server closed the connection
  • 如何改变ios中源图像的脸部肤色?

    我的代码 如何管理不同肤色的RGB值 以及如何应用 这段代码将改变脸部和头发的颜色 但我想要 1 仅脸部着色 不包括头发 void changeSkinColorValue float value WithImage UIImage nee
  • Angular:将参数传递给另一个组件

    我被 Angular2 困住了 我想从 a 传递参数产品页面 例如 产品 ID 到支付页面 这是我迄今为止尝试过的 付款 html Message message