美文网首页
2.组件传值 - @ViewChild

2.组件传值 - @ViewChild

作者: 嗨姑娘_大个子 | 来源:发表于2018-10-23 20:24 被阅读0次
一. @ViewChild #name 获取本html页面元素引用

  • ElementRef是一个允许直接获取DOM元素的一个类,该类包含一个nativeElement属性。当不允许直接操作原生DOM元素时,该属性值为null。
  • Renderer该类包含大量可以用来操作DOM原生的方法。
  • ViewChild 是属性装饰器,用来从模板视图中获取匹配的元素。视图查询在 ngAfterViewInit 钩子函数调用前完成,因此在 ngAfterViewInit 钩子函数中,才能正确获取查询的元素。

  1. 在html中通过注入属性(#名字)添加引用
<input type="text" #myInput>
  1. 在ts中通过ViewChild获取指定元素
方法一:
import { ViewChild, ElementRef } from '@angular/core';

@ViewChild('myInput') input;  ==> @ViewChild('myInput') input: ElementRef;
ngAfterViewInit() {
    console.dir(this.input);
} 

this.input.nativeElement.focus();  // 获取焦点
方法二:
//触发这个方法就可以通过参数box获取到这个元素
<div #box (click)="fn(box)"></div>  
fn(dom){ console.log(dom)}
二. @ViewChild 父组件获取子组件的方法(引用)

子组件CircleComponent中定义了 getColorRedFun(i)方法,父组件中想调用这个方法。

  1. html中添加标记 #circleComponent
  2. 使用@ViewChild访问子组件
  3. ngAfterViewInit()以后才可以访问到获取的子组件
  4. 就可以通过 this.circleComponent访问子组件中的属性和方法了。(也可以直接在方法中使用 this.自定义引用子组件组件名.方法 的方式使用!)
// --------------html--------------
<page-circle #circleComponent> </page-circle>

// --------------ts--------------
export class HomePage {
    @ViewChild("circleComponent")
    circleComponent: CircleComponent;
    
    ngAfterViewInit() {  
        this.circleComponent.getColorRedFun(4);
    }
}
栗子2:
import { LiveVideoComponent } from '../../components/live-video/live-video.component';

export class PlayBackModelComponent implements OnInit, AfterViewInit {
    //@ViewChild(子组件名称)    随便命名:子组件名称
    @ViewChild(LiveVideoComponent) live: LiveVideoComponent;
}

ngAfterViewInit() { 
    //调用 LiveVideoComponent 内部的 initLiveVideo方法
    this.live.initLiveVideo();  
}
三. 使用 #name 局部变量获取子组件的引用
// 父组件 html 
<li *ngFor="let item of dataSet">
    <app-child [names] = "item" (click)="father.childFn()" #father></app-child>    //使用模板局部变量 #father 调用子组件的方法
</li>

// 父组件 ts
dataSet = [
    {"id":0,"name":"张三"},
    {"id":1,"name":"李四"}
]
// 子组件 html
<span>{{names.name}}</span> 

// 子组件 ts
@Input() names: any = {}
childFn(){
    console.log("我是子类的方法");
}
angular2生命周期钩子函数
  1. 每个接口都有唯一的一个钩子方法,由接口名加上 ng前缀构成的。比如,OnInit接口的钩子方法叫做ngOnInit。
  2. 生命周期的顺序:
  • ngOnChanges:在ngOnInit之前,当数据绑定输入属性的值发生变化时。
  • ngOnInit:在第一次ngOnChanges之后。
  • ngDoCheck:每次Angular变化检测时。
  • ngAfterContentInit:在外部内容放到组件内之后。
  • ngAfterContentChecked:在放到组件内的外部内容每次检查之后。
  • ngAfterViewInit:在初始化组件视图和子视图之后。
  • ngAfterViewChecked:在妹子组件视图和子视图检查之后。
  • ngOnDestroy:在Angular销毁组件/指令之前。

相关文章

  • 2.组件传值 - @ViewChild

    一. @ViewChild #name 获取本html页面元素引用 参考:https://www.jb51.ne...

  • angular组件传值

    父子组件通信传值的方式有三种:@Input,@Output,@ViewChild。按照顺序来分享各自的不同: 一:...

  • react父子组件传值

    1、父==》子组件传值父组件 子组件 2.子==》父组件传值子组件 父组件

  • vue不同组件间传值方式

    父传子子传父非父子传值 1.父组件向子组件进行传值 父组件: 子组件: 2.子组件向父组件传值 子组件: 父组件:...

  • vue 组件之间传值方法

    1. 父组件向子组件传值 父组件: 子组件: 2. 子组件向父组件传值 子组件: 父组件: 3. 非父子之间传值 ...

  • 07-组件之间的传值:父组件给子组件传值

    组件之间的传值分为三种传值方式 1.父组件传值给子组件:使用属性传 props['自定义属性名']2.子组件传...

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

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

  • vue 面试

    组件之间的传值? 1.父组件与子组件传值 父组件通过标签上面定义传值子组件通过props方法接受数据 2.子组件向...

  • reactNative 之组件传值和反向传值

    在项目中我们经常会遇到传值,传值有正向传值和反向传值,比如1.正向传值:从A组件push到B组件传值2.反向传值:...

  • vue中父子组件传值(通俗易懂)

    1.父子组件传值 首先我要说的是父组件如何向子组件传值传的值分为静态值和动态值 1.传静态值 2.传动态值 当然,...

网友评论

      本文标题:2.组件传值 - @ViewChild

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