微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过子组件引用覆盖相同属性后无法更改输入属性 - @ViewChild() 第一个子组件第二个子组件父模板文件父打字稿文件

如何解决通过子组件引用覆盖相同属性后无法更改输入属性 - @ViewChild() 第一个子组件第二个子组件父模板文件父打字稿文件

我试图通过@ViewChild 从父组件切换子组件的可见性。
我正在将父组件的 visiblity 的两个子组件的 allComponentVisibility=true 设置为 true。

在某些事件中,我设置了 allComponentVisibility=false 并通过 @viewchild 更改了特定组件的 visiblity=true

但是当我在 _AppComponent.ts

中设置 visiblity 时,allComponentVisibility=false 不会改变

一个子组件

export class RecipesComponent implements OnInit {
  @Input('setRecipeVisibility') visibility: boolean;  
}

第二个子组件

export class ShoppingListComponent implements OnInit {
  @Input('setShoppingListVisiblity') visibility : boolean;
}

父模板文件

<app-header 
  (onRecipeEventFired)="setRecipeVisible()" 
  (onshoppingListEventFired)="setShoppingListVisible()">
</app-header>

<div class="container">
  <div class="row">
    <div class="col-md-12">
      <app-recipes 
        [setRecipeVisibility]="allComponentVisibility" 
        #recipeReference>
      </app-recipes>
      <app-shopping-list 
        [setShoppingListVisiblity]="allComponentVisibility" 
        #shoppingListReference>
      </app-shopping-list>
    </div>
  </div>
</div>

父打字稿文件

export class AppComponent {
  @ViewChild(RecipesComponent) recipeReference: RecipesComponent;
  @ViewChild(ShoppingListComponent) shoppingListReference: ShoppingListComponent;

  allComponentVisibility = true;

  setRecipeVisible(){
    this.allComponentVisibility = false;
    this.recipeReference.visibility=true;
  }

  setShoppingListVisible(){
    this.allComponentVisibility = false;
    this.shoppingListReference.visibility=true;
  }
}

解决方法

当您输入 INPUT 时,它会将您传递的变量作为参考 所以基本上你在做什么是让孩子的变量被引用到 allComponentVisibility。

因此子项的值将始终与 allComponentVisibility 相同。 更改父项或任何子项,将更改相同的引用。

您应该尝试考虑一些其他控制变量以了解哪个组件应该可见,例如您可以将变量分开。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。