【问题标题】:Update class of a component from a different component in Angular2从Angular2中的不同组件更新组件的类
【发布时间】:2017-05-17 06:32:42
【问题描述】:

当单击按钮时,我正在尝试更新“侧边栏”组件中可用的元素类,该按钮在名为“标题”的不同组件中可用

我目前的设置:

app.ts

@Component({
  selector: 'my-app',
  template: `
    <div>
      <app-header></app-header>
      <app-sidebar></app-sidebar>
    </div>
  `,
})

header.ts

@Component({
  selector: 'app-header',
  template: '<header><button (click)="isActiveSidebar = false">close aside</button></header>'
})

export class HeaderComponent implements OnInit {
  isActiveSidebar = true;
}

sidebar.ts

@Component({
  selector: 'app-sidebar',
  template: '<aside [class.aside-hidden]="!isActiveSidebar">sidbar</aside>'
})

Plunkr https://plnkr.co/edit/7iTE8Nb4R0TbUqhYv3QG?p=preview

我在这里期待的是,当我单击标题组件中的按钮时,属性 isActiveSidebar 将设置为 false,而侧边栏组件中的 aside 元素将获得类 'aside-hidden'

当我在单个组件中使用相同的设置时,同样的设置对我有用。目前我不知道如何在两个不同的组件之间完成这项工作。如果您能通过更新给定的 plunkr 演示来帮助我,我将不胜感激。

【问题讨论】:

    标签: angular angular2-components


    【解决方案1】:

    HeaderComponent 中创建一个@Output() 并将其与侧边栏连接起来:

    @Component({
      selector: 'app-header',
      template: '<header><button (click)="deactivate()">close aside</button></header>'
    })
    
    export class HeaderComponent implements OnInit {
      @Output() deactivateSidebar:EventEmitter<bool> = new EventEmitter<bool>();
      isActiveSidebar = true;
    
      deactivate() {
        this.isActiveSidebar = false;
        this.deactivateSidebar.emit(null);
      }
    }
    
    @Component({
      selector: 'my-app',
      template: `
        <div>
          <app-header (deactivateSidebar)="sidebar.deactivate()"></app-header>
          <app-sidebar #sidebar></app-sidebar>
        </div>
      `,
    })
    
    class AppSidebarComponent {
      deactivate() {
        this.isActiveSidebar = false;
      }
    }
    

    【讨论】:

    • 感谢您的回复。这里#sidebar是什么意思?
    • 这是一个模板变量。如果是纯 HTML 元素,它会创建对元素的引用,如果是组件,它会创建对组件实例的引用。我用它来访问(deactivateSidebar)="sidebar. ..."中的侧边栏组件
    • 我应该把'class AppSidebarComponent...'放在哪里,你能更新我的plunkr吗?
    • 这只是假设你的侧边栏组件类是如何命名的。
    • 我试过这个,但没有运气。你能检查我更新的 plunkr 吗? plnkr.co/edit/7iTE8Nb4R0TbUqhYv3QG?p=preview
    猜你喜欢
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 2016-03-20
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多