`

ng2 @input和@output理解

 
阅读更多

先做个比方,然后奉上代码
比如:

<talk-cmp [talk]="someExp" (rate)="eventHandler($event.rating)">

input, [talk]="someExp" 这个标签可以理解为一个专门的监听器,监听父组件传递过来的someExp参数,并存入自身组件的talk变量;好像是开了个后门,允许且只允许父组件的someExp进入,一旦进入立刻抓进一个叫talk的牢房,然后子组件中就可以通过@Input来定义这个变量talk然后使用它。

output ,(click)="eventHandler($event.rating) 这个意思是, 当子组件的click事件被触发,就执行父组件的eventHandler函数,并把子组件的参数$event.rating传递给父组件的eventHandler函数;就好像,当小孩子一哭(执行click事件),他的母亲立刻把他抱在怀里(执行母亲的eventHandler),同时母亲获得了小孩子的一些参数($event.rating),上面的[talk]就相当于母亲给孩子的礼物,但是孩子只能通过@input()去拿。

1、@input()

父组件 father.component.ts 提供数据

import {Component} from "@angular/core";
@Component({
    selector: "my-father",
    templateUrl: "father.html"
})
export class FatherComponent {
    data: Array<Object>;
    constructor() {
        this.data = [
            {
                "id": 1,
                "name": "html"
            },
            {
                "id": 2,
                "name": "css"
            },
            {
                "id": 3,
                "name": "angular"
            },
            {
                "id": 4,
                "name": "ionic"
            },
            {
                "id": 5,
                "name": "node"
            }
        ]
    }
}

模板文件 father.html

<h1>父组件</h1>
// 包含子组件, 并使用属性传递数据过去
<my-child [info]="data"></my-child>

子组件 child.component.ts 获取数据

import {Component, Input} from "@angular/core";
@Component({
    selector: "my-child",
    templateUrl: "child.html"
})
export class ChildComponent {   
    // 使用@Input获取传递过来的数据
    @Input()
    info: Array<Object>;
    constructor() {
    
    }
}

子组件 child.html模板文件

<ul>
    <li *ngFor="let item of info">
        {{item.name}}
    </li>
</ul>

2、@Output()

子组件three-link.component.ts

1. 引入

import {Component, OnInit, Output, EventEmitter} from "@angular/core";

2. 定义输出变量

export class ThreeLinkComponent {
    province: string;
    // 输出一下参数
    @Output() provinceOut = new EventEmitter();   
    constructor() {
        this.province = "陕西";
    } 
}

3. 事件出发,发射变量给父组件

provinceChange() {
    // 选择省份的时候发射省份给父组件
    this.provinceOut.emit(this.province);
}

父组件模板

<!--三级联动组件-->
<three-link (provinceOut)="recPro($event)"></three-link>

父组件

// 函数接受子函数传递过来的变量, 子函数中emit的时候触发这个函数。
recPro(event) {
   this.province = event;
}

再添加一个父组件中访问子组件中的方法
子组件CircleComponent中定义了 getColorRedFun(i)方法,父组件中想调用这个方法。
1、html中添加标记 #circleComponent
2、使用@ViewChild访问子组件
3、ngAfterViewInit()以后才可以访问到获取的子组件
4、就可以通过 this.circleComponent访问子组件中的属性和方法了。

 
html
<page-circle #circleComponent></page-circle>

ts
export class HomePage {
  @ViewChild("circleComponent")
  circleComponent: CircleComponent;
  ngAfterViewInit() {
    console.log(this.circleComponent);
    this.circleComponent.getColorRedFun(4);
  }
}
分享到:
评论

相关推荐

    angular2 ng2 @input和@output理解及示例

    在本文中,我们将深入了解 @Input 和 @Output 的理解和示例。 一、@Input @Input 是 Angular2 中的一种装饰器,它用于在父组件中将数据传递给子组件。在父组件中,我们可以使用属性绑定来将数据传递给子组件,而在...

    Angular 2父子组件数据传递之@Input和@Output详解 (上)

    Angular 提供了@Input和@Output语法来处理组件数据的流入流出,接下来我们通过@Input和@Output来演示父子组建之间的数据传递 父组件向子组件传递数据 父组件传递数据到子组件通过@Input方式的现实方式 第一步:定义...

    [ng-book.2r60随书代码]ng-book.2.Angular.4.r60.2017.4.code-samples.zip

    《Angular 4编程实战》(ng-book.2)是一本深度解析Angular开发的权威书籍,其随书代码库包含了丰富的示例和练习,帮助读者深入理解Angular 4框架的精髓。这个压缩包“ng-book.2.Angular.4.r60.2017.4.code-samples....

    syslog-ng-3.7.3 源码

    源码学习过程中,可以关注这些模块的设计思路,理解其核心函数和数据结构,以及如何通过配置文件来定制syslog-ng的行为。 四、syslog-ng应用实践 syslog-ng 3.7.3适用于各种场景,如网络安全监控、系统审计、故障...

    angular自定义下拉列表以及tab切换的实现

    import { Component, Input, Output, EventEmitter } from '@angular/core'; @Component({ selector: 'app-custom-dropdown', templateUrl: './custom-dropdown.component.html', styleUrls: ['./custom-...

    Angular父子组件以及组件之间通讯示例代码.zip

    3. **@Input() 和 @Output() 装饰器**:在 TypeScript 类中,我们可以使用`@Input()`装饰器定义输入属性,`@Output()`装饰器定义输出事件。这样可以更清晰地声明组件之间的数据流向。 4. **服务(Services)**:...

    angular 学习笔记

    - 输入输出属性`@Input()`和`@Output()`实现父子组件间的通讯。 - 中间人模式(Service)或事件总线模式处理跨级组件通信。 - 生命周期钩子如`ngOnInit`和`ngAfterViewInit`用于组件初始化和DOM操作。 7. **表单...

    Angular组件动态加载示例.zip

    6. **组件通信与销毁**: 创建的组件实例可以通过注入`Injector`来访问服务,也可以使用`@Input`和`@Output`进行父子组件间的通信。当不再需要组件时,调用`componentRef.destroy()`来销毁它。 在"Angular组件动态...

    IBIS模型语法[参照].pdf

    IBIS模型语法的重要性在于,它提供了一种 thống一的方式来描述IC的输入/输出缓冲器行为,从而使得设计人员和制造商能够更好地理解和communicate IC的行为。 IBIS模型语法的应用场景包括: 1. 集成电路设计:IBIS...

    浅谈angular2子组件的事件传递(任意组件事件传递)

    在处理大型、多层次的组件树时,传统的事件绑定(如@Input和@Output装饰器)可能会导致代码变得难以管理和维护。在这种情况下,使用服务(Service)作为事件总线(Event Bus)可以提供一种更灵活的事件传递方式,...

    欧姆龙PLCIO接点表 -HDMI自动检测.pdf

    在这个HDMI自动检测设备中,我们可以看到多个输入(Input)和输出(Output)接点,每个接点对应一个特定的功能: 1. 输入接点(Input): - 启动按钮、停止按钮和复位按钮:这些是人机交互接口,允许操作员控制...

    trang-jar下载

    Trang的主要功能是将不同格式的XML Schema(如W3C XML Schema、RELAX NG、DTD等)互相转换,这对于理解和兼容不同的XML规范至关重要。 XML Schema是一种定义XML文档结构和数据类型的语言,用于确保XML文档遵循预设...

    Angular2 组件通信的实例代码

    组件通信在Angular2中是构建复杂应用的关键,它允许组件之间相互协作,共享数据和功能。本文主要讨论了七种组件间的通信方式,包括输入型绑定、setter监听、ngOnChanges钩子、事件传播、本地变量互动、ViewChild的...

    解决angular2在双向数据绑定时[(ngModel)]无法使用的问题

    3. **父组件与子组件通信**:如果你在子组件中使用`ngModel`,确保父组件已通过`@Input()`和`@Output()`正确传递数据。 4. **模块配置错误**:确保你的组件已经被正确地声明在某个模块中,且这个模块正确导入了`...

    trang.jar.zip

    3. 使用java -jar命令运行Trang,指定输入和输出文件,例如:`java -jar trang.jar input.xml output.xsd`,这会将XML文件转换为XSD。 4. 根据需求,可能还需要指定其他参数或选项来控制转换过程。 在Java开发中,...

    dynamicCreateComponent.7z

    解压后,可以直接运行查看效果,这对于学习和理解Angular动态创建组件的机制非常有帮助。记得先安装必要的依赖,如Angular CLI和TypeScript编译器,然后按照项目结构配置和启动应用。通过查看源代码,你可以看到如何...

Global site tag (gtag.js) - Google Analytics