Angular -- 组件传值
<h2>一、父传子</h2><ol class="ol-list">
<li class="md-list-item md-focus-container">
<p class="md-end-block md-p md-focus"><span class="md-plain md-expand">在父组件ts中定义要传递的信息</span></p>
<p class="md-end-block md-p"><img src="https://img2018.cnblogs.com/common/1420220/202001/1420220-20200110155817290-1064287622.jpg"></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">在父组件html中的子组件标签中定义自定义属性来绑定父组件定义的信息</span></p>
<p class="md-end-block md-p"><span class="md-tab"><span class="md-plain"><span class="md-tag md-raw-inline"><img src="https://img2018.cnblogs.com/common/1420220/202001/1420220-20200110155905898-754094219.jpg"><br></span></span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">在子组件中的ts中,通过@Input来接收自定义属性的名称</span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">import {Input} from '@angular/core';</span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">@Input() info:<span><em>string</em><span class="md-plain">;<br><img src="https://img2018.cnblogs.com/common/1420220/202001/1420220-20200110161011182-1769731041.jpg"><br></span></span></span></span></p>
</li>
<li class="md-end-block md-p"><span class="md-plain">在子组件中的html中就能直接得到值了</span></li>
</ol>
<p class="md-end-block md-p md-focus"><span class="md-tab"> <span class="md-plain md-expand">{{info}} ===> father to child<br></span></span><span class="md-tab"><span class="md-plain md-expand"><br></span></span></p>
<p class="md-end-block md-p md-focus"> </p>
<h2 class="md-end-block md-p md-focus"><span class="md-tab"><span class="md-plain md-expand">二、子传父</span></span></h2>
<h4 class="md-end-block md-heading md-focus"><span class="md-plain md-expand"> 方法一:@Output</span></h4>
<ol class="ol-list">
<li class="md-list-item md-focus-container">
<p class="md-end-block md-p md-focus"><span class="md-plain md-expand">在子组件中导入Output 和 EventEmitter</span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">import {Output, EventEmitter } from '@angular/core';</span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">并且通过@Output实例化要传递向父组件的消息</span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain"> @Output() private outer = new EventEmitter();</span></span></p>
<p class="md-end-block md-p"><span class="md-plain"> <span class="md-tab"> <span class="md-plain">public chtofather = 'child to father';</span></span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">给子组件添加点击事件,点击的时候将数据传递给父组件</span></p>
<p class="md-end-block md-p"><span class="md-plain">handlerClick() {</span></p>
<p class="md-end-block md-p"><span class="md-plain"> <span class="md-tab"> <span class="md-plain">this.outer.emit(this.chtofather)</span></span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain"> }</span></span></p>
<pre class="md-fences md-end-block ty-contain-cm modeLoaded"><span><p (click)="handlerClick()"></p></span></pre>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">在父组件html中绑定自定义事件</span></p>
<p class="md-end-block md-p"><span class="md-plain"><app-test (outer) = "handlerChild($event)"><span class="md-tag md-raw-inline"></app-test></span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">在父组件的ts中通过刚刚绑定的自定义事件中的event就可以获取到了</span></p>
<p class="md-end-block md-p"><span class="md-plain">handlerChild(<span><em>e</em><span class="md-plain">) {</span></span></span></p>
<p class="md-end-block md-p"><span class="md-plain"> <span><em>console</em><span class="md-plain">.log(e)</span></span></span></p>
<p class="md-end-block md-p md-focus"><span class="md-plain md-expand"> }<br><img src="https://img2018.cnblogs.com/common/1420220/202001/1420220-20200110162858120-280983518.jpg"><br></span></p>
</li>
</ol>
<h4 class="md-end-block md-heading md-focus"><span class="md-plain md-expand"> 方法二:@ViewChild</span></h4>
<blockquote><ol class="ol-list">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">在父组件html里的子组件标签上定义一个名字(#名字),相当于这个子组件的id名</span></p>
<pre class="md-fences md-end-block ty-contain-cm modeLoaded"><span><app-son #son ></app-son> </span></pre>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">在父组件的ts中引入ViewChild</span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">import { Component, ViewChild } from '@angular/core';</span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">并使用</span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">@ViewChild('son') son; 括号里面的名称要与子组件标签#后面的名称一致。</span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">最后就可以调用子组件的数据和方法,如果子组件中有一个数据为viewChildinfo,就可以这样去调用</span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">getData() {</span></span></p>
<p class="md-end-block md-p"><span class="md-plain"> <span class="md-tab"> <span class="md-plain">this.mydata = this.son.viewChildinfo;</span></span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">}</span></span></p>
</li>
</ol></blockquote><br><br>
来源:https://www.cnblogs.com/yanghana/p/12176713.html
頁:
[1]