`

angular2 ng2 @input和@output理解

 
阅读更多
angular2 @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)

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;
}
分享到:
评论

相关推荐

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

    本篇文章主要介绍了angular2 ng2 @input和@output理解及示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Angular2 组件间通过@Input @Output通讯示例

    本文介绍了Angular2 组件间通过@Input @Output通讯示例,分享给大家,具体如下: 父组件传给子组件: 子组件设置@Input属性,父组件即可通过设置html属性给子组件传值。 子组件: @Input() title:string; _name:...

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

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

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

    之前已经给大家介绍了Angular 2父子组件数据传递之@Input和@Output的相关内容,下面这篇文章我们再进一步的进行介绍: 子组件向父组件传递数据使用事件传递是子组件向父组件传递数据最常用的方式,子组件需要实例化...

    详解Angular2中Input和Output用法及示例

    对于angular2中的Input和Output可以和AngularJS中指令作类比。 Input相当于指令的值绑定,无论是单向的(@)还是双向的(=)。都是将父作用域的值“输入”到子作用域中,然后子作用域进行相关处理。 Output相当于指令的...

    ng存根

    import { Component , OnInit , EventEmitter , Input , Output } from '@angular/core' ; @ Component ( { selector : 'app-greeter' , template : '&lt;button (click)="onClick()"&gt;Say Hi&lt;/button&gt;' ,...

    Angular父子组件通过服务传参的示例方法

    一开始想到了@input和@output,然而由于并不是单纯的父子组件关系,而是包含路由的父子组件关系,所以并不能使用@input方法和@output方法。 然后去搜索一下,发现stackoverflow上有答案,用的是service来进行传参,...

    Angular 2父子组件数据传递之局部变量获取子组件其他成员

    通过@Input和@Output可以实现数据之间的传递,但是无法获取子组件的类属性和类方法,接下来我们通过局部变量方式实现获取子组件其他成员 第一步:定义子组件: ChildenComponent.ts (1).子组件中之定义了一个fun1...

    Angular2实现自定义双向绑定属性

    import { Component, OnInit, Output, Input, EventEmitter } from '@angular/core'; @Component({ selector: 'twoway', template: ` &lt;input [(ngModel)]="username"&gt; &lt;p&gt;Hello {{username}}! ` }) ...

    angular组件继承的实现方法第1/2页

    Metadata:如 @Input()、@Output()、@ContentChild/Children、@ViewChild/Children 等。在派生类中定义的元数据将覆盖继承链中的任何先前的元数据,否则将使用基类元数据。 Constructor:如果派生类未声明构造函数...

    Angular2 父子组件通信方式的示例

    Angular2官方文档对组件交互这块有详细的介绍–&gt;文档–组件之间的交互。按文档介绍,组件间交互的方式一共有4种,包括: 通过输入型绑定把数据从父组件传到子组件(@Input decoration);子组件暴露一个...

    angular-testing食谱:Angular 2+版的简单测试模式

    此仓库适用于Angular 2+版本。 该存储库的目标是为Angular提供常见测试场景的配方集合。 我为每一个建议/建议感到高兴 :grinning_face_with_big_eyes: 。 谈话(视频+幻灯片) 我一直在讲“用Angular测试”。 ...

    angular-app:angular6管理系统

    实现的功能1组件的编写(登录,main,firstComponent,secondComponent)2数据请求3组件间传值(@Input,@output等)4服务5指令6路由器7请求拦截8登陆功能(待完成。。。)我的角度应用该项目是使用版本7.0.2生成的...

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

    以前用angular2官网给的烹饪技巧基本解决90%的需求,当然这个如果是用Input,Output也可以,但是那样的话,结构将是混沌状态。 附:angluar2的组件通讯的传送门(anglar2的官网对Safari支持可不太好,真爱生命,请用...

    angular组件间传值测试的方法详解

    我们知道angular组件间通讯有多种方法,其中最常用的一种方法就是借助于 @Input 和 @Output 进行通讯。具体如何通讯请参考angular组件间通讯,本文不再赘述,我们来讲讲关于此方法如何进行单元测试。 创建假组件 ...

    Angular 封装并发布组件的方法示例

    作为入门,这是一个非常简单的demo,但核心的接收使用者的输入@Input(),以及返回数据给使用者@Output()都实现了,所以有一定的借鉴意义。 目录结构:(部分目录不是框架中自动生成,二是后期添加,按照步骤进行即可...

    如何编写一个完整的Angular4 FormText 组件

    import { Component, Output, Input, forwardRef, EventEmitter} from '@angular/core'; import {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms'; @Component({ selector: 'form-text', ...

    bpmn-js-example-angular:如何将bpmn-js与Angular应用程序集成的示例

    bpmn-js-example-angular 一个如何将bpmn-js与应用程序集成的示例。 先决条件 假设您使用ng命令引导了您的应用程序: ng new bpmn-js-app --defaults=true cd bpmn-js-app 整合bpmn-js 创建一个类似于的组件: ...

    bpmn-js-angular:整合BPMNJS的角度

    bpmn-js-example-angular 一个如何将bpmn-js与应用程序集成的示例。 先决条件 假设您使用ng命令引导了您的应用程序: ng new bpmn-js-app --defaults=true cd bpmn-js-app 整合bpmn-js 创建一个类似于的组件: ...

Global site tag (gtag.js) - Google Analytics