【问题标题】:Passing Data From Child Component Into Parent Component将数据从子组件传递到父组件
【发布时间】:2017-04-20 21:38:42
【问题描述】:

我的角度有问题,这里有两个组件:

  • MyApp(父组件)
  • 登录页面(子组件)

我在部分MyApp 中有一个属性UserNow,我想通过组件LoginPage 设置属性UserNow 的值。怎么做?

我尝试过(但没有任何影响)

Import {MyApp} from '../../app/app.component'; 

@Component({
  selector: 'page-login',
  templateUrl: 'login.html'
})
export class LoginPage {
    public app: any;

    login() {
        ...
        this.app = MyApp;
        this.app.userNow = MyValue;
        ...
    }
}

【问题讨论】:

标签: angular ionic2 angular-components


【解决方案1】:

有几种方法可以做到这一点。

1) 使用服务:服务通常在应用程序中具有单个实例,并且可以用于轻松地在组件之间共享数据。 例如。创建一个服务 userService 并将其注入组件中您想使用它的任何地方。

2) 使用 Emit:Emit 用于在应用程序中发出一个事件,并可以采取相应的动作。

this.eventInChild.emit(data);

可以对事件发射采取两种行动。

  • 调用父函数:

<child-component (eventInChild)="parentFunction($event)"></child-component>

  • 从服务发射和订阅事件(可以在服务和组件中订阅):

在服务中是这样的:

getEmitStatus() {
    return this.eventInService;
}

//In component or service - to listen to event

this.subscription = this.userService.getEmitStatus()
    .subscribe(item => {
         //thing to do here
}); 

【讨论】:

    【解决方案2】:

    就像@SaUrAbHMaUrYa 解释的那样,您可以从孩子向父母发送数据,我会这样做:

    父母

    <page-login (on_user_has_logged_in)="userNow = $event"></page-login>
    

    孩子:

    import {Output}       from '@angular/core'
    import {EventEmitter} from '@angular/core'
    
    @Component({
      selector: 'page-login',
      templateUrl: 'login.html'
    })
    export class LoginPage {
        @Output() on_user_has_logged_in : EventEmitter<any> = new EventEmitter()
    
        login(MyValue) {
            this.on_user_has_logged_in.emit(MyValue)
        }
    }
    

    【讨论】:

    • 我认为代码应该是:this.on_user_has_logged_in.emit(MyValue) 而不是this.on_user_has_logged_in(MyValue)。如果我错了,请纠正我。
    • 你是完全正确的@KunalKakkad,谢谢你的注意!
    猜你喜欢
    • 2019-02-27
    • 1970-01-01
    • 2020-10-22
    • 2017-06-10
    • 2018-02-15
    • 2016-10-13
    • 2022-06-30
    相关资源
    最近更新 更多