使用父组件中的click事件,子组件中的Angular2 Toggle类

Kayoti

我正在尝试使用click事件打开/关闭类,我遇到的问题是我的click事件在父组件中,而Class在子组件中。我可以使用@Input()装饰器用该类初始化该子级,但之后无法切换该类

import { Component, AfterViewInit, Input, OnInit } from '@angular/core';
import { SidebarComponent } from './components/sidebar/sidebar.component';

@Component({
   moduleId: module.id,
   selector: 'body',
   host: {
      '[class.navMdClass]' : 'navMdClass',
      '[class]' : 'classNames'
   },
   templateUrl:'app.component.html' ,
   directives:[SidebarComponent],    
})
export class AppComponent implements OnInit {
   private isClassVisible:boolean;
   constructor () {    

   }
   ngOnInit() {
      this.isClassVisible=true;
   }
   toggleClass() {
      this.isClassVisible = !this.isClassVisible;       
   }
}
//Child component
import { Component, Input, EventEmitter, OnInit,SimpleChange } from '@angular/core';
@Component({
    moduleId: module.id,
    selector: 'sidebar',
    templateUrl:'sidebar.component.html' 
})

export class SidebarComponent implements OnInit{
    @Input() isClassVisible:boolean;

ngOnInit() { }
}
//Parent click event triggers toggleClass
<div class="nav toggle">
          <a (click)="toggleClass();" href="#" id="menu_toggle"><i class="fa fa-bars"></i></a>
      </div>
//Child div where target class is
<div class="left_col" [class.scroll-view]="[isClassVisible]" >
Kayoti

我找到了解决该问题的解决方案,该解决方案涉及将类名称作为属性传递给子组件。如果您有多个要传递给不同位置的类,则可以传递数组属性并在适当的区域输出。

//parent component
import { Component, AfterViewInit, Input, OnInit } from '@angular/core';
import { SidebarComponent } from './components/sidebar/sidebar.component';

@Component({
   moduleId: module.id,
   selector: 'body',
   host: {
      '[class.navMdClass]' : 'navMdClass',
      '[class]' : 'classNames[0]'
   },
   templateUrl:'app.component.html' ,
   directives:[SidebarComponent]


})
export class AppComponent{

   navMdClass:boolean;
   classNames:Array<any>;

   constructor () {
      this.navMdClass=false;

      this.classNames = ['nav-md', 'scroll-view',  'sidebar-footer'];
   }

   toggleClass() {

      this.navMdClass = !this.navMdClass;
      if(this.navMdClass==false){ this.classNames[0] = 'nav-md'; this.classNames[1]="scroll-view"; this.classNames[2]="sidebar-footer"}
      if(this.navMdClass==true){  this.classNames[0] = 'nav-sm'; this.classNames[1]=""; this.classNames[2]="sidebar-footer-hide"}
      //console.log(this.classNames[0]);
   }
}
//child component
import { Component, Input, EventEmitter, OnInit, SimpleChange, OnChanges  } from '@angular/core';

@Component({
    moduleId: module.id,
    selector: 'sidebar',
    templateUrl:'sidebar.component.html',
    properties: ['cls']
})

export class SidebarComponent{
    @Input() classNames:Array<any>;
}

//Parent click event triggers toggleClass
<div class="nav toggle">
          <a (click)="toggleClass();" href="#" id="menu_toggle"><i class="fa fa-bars"></i></a>
      </div>
//Sidebar selector in parent is where you pass the cls property declared in child component and pass it the classNames array from the parent component
<sidebar [cls]="classNames"></sidebar>
//Child div where target class is
<div class="left_col {{cls[1]}}" >
<div class="{{cls[2]}}" >

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Angular 2如何将组件子组件中的方法发射到组件父类

Angular2:子组件访问父类变量/函数

如何从Angular2的父组件类访问子组件类?

* ngIf在angular2中的组件类变量上

如何从类组件(父组件)更改功能组件(子组件)中的useState

从 Angular 中的子组件更改祖先的类

如何从angular2中的子组件更新父组件

如何将类从 Angular 12 和 Typescript 中的父组件添加到子组件布局?

使用scss的子组件中的后代元素不会继承父类

如何通过React中子组件的onchange事件调用父类组件中的函数?

Angular Toggle类仅在单个div上

使用 classList.toggle 定位多个类

将子组件类作为道具传递给React中的父组件

我无法从我的子(类)组件更新我的父组件中的状态

Javascript Toggle类工作但类在下拉元素中无效

使用父组件类在 Vue 中设置不同的元素

将服务注入到类(不是组件)Angular2中

如何在angular2中的父组件中访问子组件HTML元素值?

如何从Angular 2中的子组件事件触发父组件中的本地引用?

在Angular2中使用父组件的模板

在Dagger 2中使用AndroidInjections贡献模块(抽象类)作为子组件

React-子组件的父类组件功能更改类

在Angular 2中的父级中使用子级组件

Vue-将类从迭代列表中的子组件添加到父LI?

从 React 中的父 onfocus 方法切换显示子组件上的隐藏类

CSS模块和ReactJS:不同组件中的父级和子级CSS类

Angular2,TypeScript,如何将属性值读取/绑定到组件类(在ngOnInit中未定义)

从Angular 2中的路由子组件更新父组件标题

子组件中的Angular 2 ngModel更新父组件属性