Angular 角度6-如何使用按钮从另一个组件切换sidenav 切换侧导航
以上代码是一个组件中的按钮Angular 角度6-如何使用按钮从另一个组件切换sidenav 切换侧导航,angular,angular-material,angular6,Angular,Angular Material,Angular6,以上代码是一个组件中的按钮 抽屉内容 此代码希望位于另一个组件中 我该怎么做请使用我的代码并解释它如果您的组件不是直接相关的(例如路由),也许您可以使用服务 共享抽屉实例的服务 <mat-drawer #sideNav mode="push" opened="false" position="end" class="navsize _md-sidenav-backdrop"> Drawer content </mat-drawer> 构成垫子抽屉的组件 @Inj
抽屉内容
此代码希望位于另一个组件中
我该怎么做请使用我的代码并解释它如果您的组件不是直接相关的(例如路由),也许您可以使用服务 共享抽屉实例的服务
<mat-drawer #sideNav mode="push" opened="false" position="end" class="navsize _md-sidenav-backdrop">
Drawer content
</mat-drawer>
构成垫子抽屉的组件
@Injectable({
providedIn: 'root'
})
export class DrawerService {
private matDrawer: MatDrawer;
setDrawer(drawer: MatDrawer) {
this.matDrawer = drawer;
}
toggle() {
this.matDrawer.toggle();
}
}
使用按钮激活切换的组件
export class WithDrawerComponent implements OnInit {
@ViewChild(MatDrawer) matDrawer: MatDrawer;
constructor(private drawerService: DrawerService) {
}
ngOnInit() {
this.drawerService.setDrawer(this.matDrawer);
}
}
我希望它能帮助您如果您的组件不是直接相关的(例如路由),也许您可以使用服务 共享抽屉实例的服务
<mat-drawer #sideNav mode="push" opened="false" position="end" class="navsize _md-sidenav-backdrop">
Drawer content
</mat-drawer>
构成垫子抽屉的组件
@Injectable({
providedIn: 'root'
})
export class DrawerService {
private matDrawer: MatDrawer;
setDrawer(drawer: MatDrawer) {
this.matDrawer = drawer;
}
toggle() {
this.matDrawer.toggle();
}
}
使用按钮激活切换的组件
export class WithDrawerComponent implements OnInit {
@ViewChild(MatDrawer) matDrawer: MatDrawer;
constructor(private drawerService: DrawerService) {
}
ngOnInit() {
this.drawerService.setDrawer(this.matDrawer);
}
}
我希望它能帮助您从所需的另一个组件切换sidenav:
export class WithButtonComponent implements OnInit {
constructor(private drawerService: DrawerService) {
}
toggleDrawer() {
this.drawerService.toggle();
}
}
export class AppComponent {
title = 'my-app';
headerType: number;
constructor() {
this.newHeader(1);
}
newHeader(headerType: string) {
this.headerType = headerType;
}
}
sidenav
在sidenav.service.ts中:
import { Component, OnInit, ChangeDetectorRef } from '@angular/core';
import { MediaMatcher } from '@angular/cdk/layout';
import { SidenavService } from '../services/sidenav.service';
@Component({
selector: 'app-header',
templateUrl: './header.component.html',
styleUrls: ['./header.component.scss']
})
export class HeaderComponent implements OnInit {
headerType: number;
toggleActive = false;
mobileQuery: MediaQueryList;
private _mobileQueryListener: () => void;
constructor(private sidenav: SidenavService,
changeDetectorRef: ChangeDetectorRef, media: MediaMatcher) {
// to change the varible in the *ngSwitch directive
this.newHeader(1);
// this.newHeader(2);
this.mobileQuery = media.matchMedia('(max-width: 600px)');
this._mobileQueryListener = () => changeDetectorRef.detectChanges();
this.mobileQuery.addListener(this._mobileQueryListener);
}
newHeader(headerType: number) {
this.headerType = headerType;
}
toggleSidenav() {
this.toggleActive = !this.toggleActive;
this.sidenav.toggle();
}
}
假设您有多个sidenav组件,每个标题对应一个组件:
在sidenav1.component.html中:
import { Injectable } from '@angular/core';
import { MatSidenav } from '@angular/material';
@Injectable({
providedIn: 'root'
})
export class SidenavService {
private sidenav: MatSidenav;
constructor() { }
public setSidenav(sidenav: MatSidenav) {
this.sidenav = sidenav;
}
public open() {
return this.sidenav.open();
}
public close() {
return this.sidenav.close();
}
public toggle(): void {
this.sidenav.toggle();
}
}
在app.component.html中
export class WithButtonComponent implements OnInit {
constructor(private drawerService: DrawerService) {
}
toggleDrawer() {
this.drawerService.toggle();
}
}
export class AppComponent {
title = 'my-app';
headerType: number;
constructor() {
this.newHeader(1);
}
newHeader(headerType: string) {
this.headerType = headerType;
}
}
默认内容
要从所需的其他组件切换sidenav,请执行以下操作:
export class WithButtonComponent implements OnInit {
constructor(private drawerService: DrawerService) {
}
toggleDrawer() {
this.drawerService.toggle();
}
}
export class AppComponent {
title = 'my-app';
headerType: number;
constructor() {
this.newHeader(1);
}
newHeader(headerType: string) {
this.headerType = headerType;
}
}
sidenav
在sidenav.service.ts中:
import { Component, OnInit, ChangeDetectorRef } from '@angular/core';
import { MediaMatcher } from '@angular/cdk/layout';
import { SidenavService } from '../services/sidenav.service';
@Component({
selector: 'app-header',
templateUrl: './header.component.html',
styleUrls: ['./header.component.scss']
})
export class HeaderComponent implements OnInit {
headerType: number;
toggleActive = false;
mobileQuery: MediaQueryList;
private _mobileQueryListener: () => void;
constructor(private sidenav: SidenavService,
changeDetectorRef: ChangeDetectorRef, media: MediaMatcher) {
// to change the varible in the *ngSwitch directive
this.newHeader(1);
// this.newHeader(2);
this.mobileQuery = media.matchMedia('(max-width: 600px)');
this._mobileQueryListener = () => changeDetectorRef.detectChanges();
this.mobileQuery.addListener(this._mobileQueryListener);
}
newHeader(headerType: number) {
this.headerType = headerType;
}
toggleSidenav() {
this.toggleActive = !this.toggleActive;
this.sidenav.toggle();
}
}
假设您有多个sidenav组件,每个标题对应一个组件:
在sidenav1.component.html中:
import { Injectable } from '@angular/core';
import { MatSidenav } from '@angular/material';
@Injectable({
providedIn: 'root'
})
export class SidenavService {
private sidenav: MatSidenav;
constructor() { }
public setSidenav(sidenav: MatSidenav) {
this.sidenav = sidenav;
}
public open() {
return this.sidenav.open();
}
public close() {
return this.sidenav.close();
}
public toggle(): void {
this.sidenav.toggle();
}
}
在app.component.html中
export class WithButtonComponent implements OnInit {
constructor(private drawerService: DrawerService) {
}
toggleDrawer() {
this.drawerService.toggle();
}
}
export class AppComponent {
title = 'my-app';
headerType: number;
constructor() {
this.newHeader(1);
}
newHeader(headerType: string) {
this.headerType = headerType;
}
}
默认内容
使用事件发射器
。使用事件发射器
。这在toggle()内,取款器组件在其模板中包含标记?您在哪里提供服务,我刚刚更改了@Injectable指令中的参数,可能与此有关还有另一个问题与同一个问题有关,他的答案更详细这是在toggle()中提取组件在其模板中包含标记?你在哪里提供服务,我刚刚修改了@Injectable指令中的参数,可能是跟这个问题有关,还有一个问题是同一个问题,他的答案更详细