美文网首页
关于angular中@Input装饰器传入值遇到的问题

关于angular中@Input装饰器传入值遇到的问题

作者: Gemkey | 来源:发表于2018-10-19 17:39 被阅读155次

我们知道,在ng中,父子组件通信中的一种方式就是使用@Input/@Output装饰器,@Input用于数据从父组件流入子组件,@Output用于从子组件传出数据到父组件。
准备工作:定义两个组件
父组件:HomePage
html:

<ion-header>
    <ion-toolbar>
        <ion-buttons slot="start">
            <ion-menu-button></ion-menu-button>
        </ion-buttons>
        <ion-title>Home</ion-title>
    </ion-toolbar>
</ion-header>

<ion-content padding>
    父组件简单值:{{myVal}}
    <br/>
    父组件对象属性值:{{MyJson.stringify(myObject)}}
    <br/>
    子组件:
    <br/>
    <app-child [inputObject]="myObject" [inputSingleVal]="myVal"></app-child>
</ion-content>

ts:

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

@Component({
    selector: 'app-home',
    templateUrl: 'home.page.html',
    styleUrls: ['home.page.scss']
})
export class HomePage implements OnInit {
    MyJson = JSON;
    myObject = {
        name: 1
    };
    myVal = 1;
    ngOnInit(): void {
    }
}

子组件:
html:

<div>
    子组件的简单值:{{inputSingleVal}}
    <br/>
    子组件的对象属性值:{{MyJson.stringify(inputObject)}}
    <br/>
    <ion-button (click)="childCompChangeValue()">子组件改变简单值</ion-button>
    <ion-button (click)="childCompChangeObject()">子组件改变对象</ion-button>
</div>

ts:

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

@Component({
    selector: 'app-child',
    templateUrl: './child.component.html',
    styleUrls: ['./child.component.scss']
})
export class ChildComponent implements OnInit {
    @Input() inputSingleVal;
    @Input() inputObject;
    MyJson = JSON;
    ngOnInit() {
    }
    childCompChangeValue() {
        this.inputSingleVal++;
    }
    childCompChangeObject() {
        this.inputObject.name++;
    }
}

测试效果:


@Input.gif

从图片中我们可以看到:

  • 当点击改变子组件简单值按钮时,父组件的值并没有发生变化,说明父子组件的数据完全的被"隔离",相互不会被影响,当然,如果要能够实现双向绑定的效果,可以参照我前面的文章:
    angular 自定义组件中实现双向绑定
  • 当点击改变组件对象按钮时,父组件的值也发生了变化,但是这里并没有做任何相关的双向绑定的处理。
    个人理解:
      当传入基本数据类型或字符串类型数据时,等于是js中的值传递,所以当子组件改变变量值时,不会影响原来的值;
      当传入的是对象类型时,等于是js中的引用传递,子组件中的变量只是将地址指向了父组件对象,所以当子组件改变变量值时,父组件的变量也同时会跟着一起发生改变;

相关文章

  • 关于angular中@Input装饰器传入值遇到的问题

    我们知道,在ng中,父子组件通信中的一种方式就是使用@Input/@Output装饰器,@Input用于数据从父组...

  • 组件之间的通讯

    父子关系通讯: 1、父组件向子组件传入数据 – @Input 可以看到,我们使用装饰器@Input修饰了count...

  • Angular框架中的@Input()属性装饰器

    1、前言 angular中,Input是属性装饰器,用来定义组件内的输入属性。在实际的开发中主要用于父组件向子组件...

  • angular2 组件通讯

    五种方式 1. @input 把父组件中的值传递到子组件中,子组件声明变量时,前面用@input装饰器。例子1:子...

  • event对象的学习使用心得

    最近在工作中遇到了"复制上一条input的值给当前input/计算input的数值"等关于input.value的...

  • python装饰器

    什么是装饰器? 装饰器实质上是闭包的一种特殊状态,闭包中我们一般传入的是自由变量,而在装饰器中,我们传入的是一个函...

  • python中的函数

    关于python中的值传递和址传递 匿名函数 缺省函数 闭包 装饰器

  • angular2+监测属性的变化

    angular项目中通过@Input来实现从父component到子component属性的传值。angular框...

  • 父子组件传值@Input @Output @ViewChild

    一、父组件给子组件传值 -@Input 父组件调用子组件 的时候传入数据 子组件引入 Input 模块 子组件中 ...

  • input指令

    概述 Angular js的input指令是对html中的input元素的一个封装,Angular js中的inp...

网友评论

      本文标题:关于angular中@Input装饰器传入值遇到的问题

      本文链接:https://www.haomeiwen.com/subject/xzvyzftx.html