angular的组件传值
<p>angular组件传值存在三种情况,分别是<strong>父传子</strong> ,<strong>子传父</strong>,以及<strong>非父子之间</strong>进行传值</p><h2 class="md-end-block md-heading"><span class="md-plain">1.父传子</span></h2>
<p class="md-end-block md-p"><span class="md-plain"> 通过在子组件上绑定属性或者方法,在子组件xxx.componet.ts中 导入Input类, 进行接收,可以获取父组件传过来的内容</span></p>
<p class="md-end-block md-p md-focus"><span class="md-plain md-expand">父组件.html</span></p>
<div class="cnblogs_code">
<pre><app-home = 'msg' ='logApp' ='this'></app-home>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> msg是数据logApp是方法名 this是这个组件的对象</span></pre>
</div>
<p> </p>
<p class="md-end-block md-p"><span class="md-plain">子组件.component.ts</span></p>
<div class="cnblogs_Highlighter">
<pre class="brush:javascript;gutter:true;">import {Input} from '@angular/core';
---------------------------------------------------
@input() msg:string;
@input() run:any;
@input() home:home;
// 使用的时候用this进行调用
</pre>
</div>
<p> </p>
<h2 class="md-end-block md-heading"><span class="md-plain">2.子传父</span></h2>
<h4 class="md-end-block md-heading"><span class="md-plain">1.Output & eventEmitter</span></h4>
<p class="md-end-block md-p"><span class="md-plain">通过引入Output 和eventEmitter 可以设置自定义事件 从而使父组件</span></p>
<p class="md-end-block md-p"><span class="md-plain">第一步 在子组件中引入Output 以及 eventEmitter</span></p>
<div class="cnblogs_code">
<pre>import { Component, OnInit, Output,EventEmitter } from '@angular/core';</pre>
</div>
<p> </p>
<p class="md-end-block md-p"><span class="md-plain">第二步 </span></p>
<div class="cnblogs_code">
<pre>@Output private outer = <span style="color: rgba(0, 0, 255, 1)">new</span> EventEmitter()</pre>
</div>
<p> </p>
<p class="md-end-block md-p"><span class="md-plain">第三步,定义一个方法 在方法中通过emit 调用父组件的方法</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">setData(){
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.outer.emit('是嘛'<span style="color: rgba(0, 0, 0, 1)">)
}</span></pre>
</div>
<p> </p>
<p class="md-end-block md-p"><span class="md-plain">第四步, 在父组件中的标签上设置事件</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> html</span>
<app-foot (outer)="getData($event)"></app-foot>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> ts</span>
<span style="color: rgba(0, 0, 0, 1)">getData(msg:string){
console.log(msg);
}</span></pre>
</div>
<p> </p>
<p class="md-end-block md-p"><span class="md-plain">注意点: 在父组件.html中绑定方法的时候 方法名必须和子组件.component.ts中 通过 new eventEmitter()实例出的对象一致, 不然就会出现错误</span></p>
<h4 class="md-end-block md-heading"><span class="md-plain">2.viewChild</span></h4>
<p class="md-end-block md-p"><span class="md-plain">在父组件.html 给子组件标签绑定上 #xxx 通过@viewChild 获取子组件的对象 就可以获取子组件的数据以及调用子组件的方法</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> .html绑定#xxx属性</span>
<app-news #newsChild></app-news>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> component.ts</span>
import { ViewChild } from '@angular/core'<span style="color: rgba(0, 0, 0, 1)">;
</span>-----------------------
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取到news对象 就是组件</span>
@viewChild('newsChild'<span style="color: rgba(0, 0, 0, 1)">) news
</span></pre>
</div>
<p> </p>
<pre class="md-fences md-end-block ty-contain-cm modeLoaded"><span><span><span><span><span><span><span><span><span><span><span><br><span>在方法中 this.news就是可以获取这个对象实例<br><span><span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<h2 class="md-end-block md-heading"><span class="md-plain">3.非父子之间的传值 </span></h2>
<p class="md-end-block md-p"><span class="md-plain">1.service 通过服务可以进行传值 </span></p>
<p class="md-end-block md-p"><span class="md-plain">2.本地存储 localStorage sessionStorage </span></p>
<p><span class="md-plain"> </span></p><br><br>
来源:https://www.cnblogs.com/shicongcong0910/p/14338262.html
頁:
[1]