我有興趣將md-sidenav
更改爲 - 從角度材質2模式(從臺式機到臺式機)到移動式。有沒有辦法通過編程來改變它? 謝謝切換md-sidenav模式(角度材質2)
3
A
回答
9
建築,你可以更新app.component.html
<md-sidenav [mode]="isLargeScreen() ? 'side' : 'over'" [opened]="isLargeScreen()"></md-sidenav>
然後在app.component.ts
isLargeScreen() {
const width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
if (width > 720) {
return true;
} else {
return false;
}
}
這給你開通過在桌面側邊欄默認情況下,並在移動設備上覆蓋,但默認情況下是隱藏的!
1
當然!您可以在組件on initialization中執行屏幕寬度測試(或瀏覽器檢測,blech),並將結果作爲字符串存儲在變量中。
使用寬度檢測作爲一個例子,你可能會做這樣的事情:
部分app.component.ts
import { Component, ElementRef, ViewChild, OnInit } from '@angular/core';
export class AppComponent implements OnInit {
@ViewChild('wrapper')
private wrapperElement: ElementRef;
private menuMode; // Where we'll store the resulting menu mode
ngOnInit() {
// Do your simple test on the container, for example
if (this.wrapperElement.nativeElement.offsetWidth <= 720) {
this.menuMode = "over";
} else {
this.menuMode = "side";
}
}
}
和變量綁定到模板sidenav。
部分app.component.html
<div #wrapper>
<md-sidenav-container>
<md-sidenav #sidenav [mode]="menuMode"></md-sidenav>
...
</div>
這項工作的大部分是剛剛確定要如何進行測試。
你也可以測試窗口而不是包裝,但我更喜歡測試一個包裝。
注:
- 這是未測試的代碼。
- 這將觸發僅在組件的初始化,如果你 也要處理,其中用戶調整他們的瀏覽器和菜單模式變化的情況下,你需要使用做一些更花哨 HostListener
@HostListener("window:resize", ["$event"])
,但這不在你原來的 問題的範圍之內。史蒂夫·G公司的解決方案
+1
我用@ViewChild從DOM獲取MdSidenav元素,然後直接從sidenav改變模式。謝謝您的幫助! –
1
我找到了ObservableMedia的解決方案。
組件:
import {Component, OnInit, ViewEncapsulation} from "@angular/core";
import {ObservableMedia} from "@angular/flex-layout";
@Component({
moduleId: module.id,
selector: 'app-sidebar',
templateUrl: './sidebar.component.html',
styleUrls: ['./sidebar.component.scss'],
encapsulation: ViewEncapsulation.None,
})
export class SidebarComponent implements OnInit {
constructor(public media:ObservableMedia) {
}
ngOnInit(): void {
}
}
模板:
<md-sidenav-container>
<md-sidenav #sidenav mode="{{media.isActive('gt-sm') ? 'side' : 'over'}}" align="begin" class="md-whiteframe-4dp" opened >
<md-nav-list>
...
</md-nav-list>
</md-sidenav>
</md-sidenav-container>
相關問題
- 1. 角度 - 材質 - 測試 - $ mdSidenav
- 2. 角度材質 - $ mdSideNav - 背景點擊
- 3. 角度材質nvd3
- 4. Angular CLI的角度2材質
- 5. 角度2材質標籤和ngForm
- 6. 角度材質2 - 禁用紋波?
- 7. 使用角度2材質圖標
- 8. 角度材質2 - 未完整渲染
- 9. 將角度材質轉換爲TypeScript
- 10. 在角2材質滑塊
- 11. 帶箭頭切換的角度材質MenuBar無法正確切換
- 12. 卡住角度2的角度材質中的MdSnackBar的Observable Loop
- 13. 角度材質md-select
- 14. 更改角度2/4「md-menu」的材質默認樣式
- 15. 角度/角度材質:替換HTML滑塊不會更新其ng模型
- 16. 如何設置不屬於材質組件的材質角度材質
- 17. 在角度材質對話模式中使用表格
- 18. Angular2材質:對角度材質輸入的自定義驗證
- 19. md-toolbar不使用角度材質渲染材質工具欄
- 20. 角材質2個md卡響應列
- 21. 使用md-switch角度材質指令時不顯示切換按鈕
- 22. 角質材料mdMenu
- 23. 角4與材質
- 24. 材料和角度2
- 25. 錯誤:角度2材料
- 26. 角度材質對齊菜單正確
- 27. 角度材質響應滾動div
- 28. 有角度的材質md-input-class
- 29. 如何從材質角度使用paginator?
- 30. 角度材質和md-nav-bar路由
什麼並排的意思了嗎?它不清楚你想要什麼 –
md-sidenav有一個模式,可以是「上」,「推」或「側」(https://material.angular.io/components/component/sidenav) –