当前位置:  开发笔记 > 前端 > 正文

如何从子组件更改父变量?

如何解决《如何从子组件更改父变量?》经验,为你挑选了2个好方法。

这个问题很简单,但我无法摆脱它.

我有一个

父模板,我需要它通过路由模块显示子模板时消失.我期望在header标签中添加一个类,以便我可以通过CSS隐藏它.这就是我所拥有的:

app.component.ts

import { Component } from '@angular/core';
@Component({
  selector: 'app',
  template: `
    

My App

` }) export class AppComponent { hide = false; // <-- This is what I need to change in child component }

APP-routing.module.ts

import { RouterModule, Routes } from '@angular/router';

import { HomeComponent } from './welcome.component';
import { ShowOffComponent } from './show.off.component';

const routes: Routes = [
  { path: '', component: HomeComponent },
  { path: 'showoff', component: ShowOffComponent },
];

export const AppRouting = RouterModule.forRoot(routes, {
  useHash: true
});

show.offf.component.ts

import { Component } from '@angular/core';
@Component({
   selector: 'app-showoff',
   template: `
       

Show Off

Some contents...
` }) export class ShowOffComponent { hide = true; // <-- Here is the problem. // I don't have any idea how to reach parent variables. }

Suraj Rao.. 8

您可以使用输出发射器

在您的子组件中,

import { Component } from '@angular/core';
@Component({
   selector: 'app-showoff',
   template: `
       

Show Off

Some contents...
` }) export class ShowOffComponent { @Output() onHide = new EventEmitter(); setHide(){ this.onHide.emit(true); } }

在父母,

export class AppComponent {
  hide = false;

  changeHide(val: boolean) {
    this.hide = val;
  }
}


Anjana Silva.. 5

我最近在Angular 6中遇到了同样的现象。

我想访问和更改属于父组件或祖父母组件的变量。参见下图。我想访问和更改属于吉姆(汤姆的孩子)和萨拉(汤姆的孙子)的汤姆所属的变量。

可能还有其他解决方案,但我用来克服此问题的方法是使用ViewContainerRef。我必须将其注入ViewContainerRef到Child组件的构造函数中,即需要访问父Component并遍历父节点(或多个节点)以找到父变量。

注入构造函数,

constructor(private viewContainerRef: ViewContainerRef) { }

访问并遍历父节点,

getParentComponent() {
    return this.viewContainerRef[ '_data' ].componentView.component.viewContainerRef[ '_view' ].component
}

我已经用上图中给出的方案制作了一个StackBlitz示例。

https://stackblitz.com/edit/angular-comms

希望有人会发现这个有用。

谢谢。



1> Suraj Rao..:

您可以使用输出发射器

在您的子组件中,

import { Component } from '@angular/core';
@Component({
   selector: 'app-showoff',
   template: `
       

Show Off

Some contents...
` }) export class ShowOffComponent { @Output() onHide = new EventEmitter(); setHide(){ this.onHide.emit(true); } }

在父母,

export class AppComponent {
  hide = false;

  changeHide(val: boolean) {
    this.hide = val;
  }
}



2> Anjana Silva..:

我最近在Angular 6中遇到了同样的现象。

我想访问和更改属于父组件或祖父母组件的变量。参见下图。我想访问和更改属于吉姆(汤姆的孩子)和萨拉(汤姆的孙子)的汤姆所属的变量。

可能还有其他解决方案,但我用来克服此问题的方法是使用ViewContainerRef。我必须将其注入ViewContainerRef到Child组件的构造函数中,即需要访问父Component并遍历父节点(或多个节点)以找到父变量。

注入构造函数,

constructor(private viewContainerRef: ViewContainerRef) { }

访问并遍历父节点,

getParentComponent() {
    return this.viewContainerRef[ '_data' ].componentView.component.viewContainerRef[ '_view' ].component
}

我已经用上图中给出的方案制作了一个StackBlitz示例。

https://stackblitz.com/edit/angular-comms

希望有人会发现这个有用。

谢谢。

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有