【发布时间】:2017-01-10 15:48:39
【问题描述】:
我正在尝试制作一个将根据窗口大小缩放其大小的 sidenav。
我给它一个项目列表,这些项目组合起来比窗口高度高。我想让它成为一个可滚动列表,而不设置最大高度,而是让它始终是窗口高度。
这是它目前的样子:
可以看到窗口向下滚动,sidenav 滚动被禁用。我已经尝试了很多东西,目前这是我的代码状态:
logs.component.html
<div class="container" [style.max-height]="containerHeight()" (window:resize)="resize($event.target.innerHeight)">
<div class="row">
<div class="col-2" color="primary">
<app-search-sidebar (selectedChanged)="selected=$event" [items]="items"></app-search-sidebar>
</div>
<div class="col-10">
<md-tab-group>
<md-tab [label]="selected">
<h1>{{selected}}</h1>
<p>...</p>
</md-tab>
</md-tab-group>
</div>
</div>
</div>
logs.component.css
.container {
width: 100%;
min-height: 100%;
overflow: hidden;
}
.row {
height: 100%;
margin-bottom: -9999px;
padding-bottom: 9999px;
}
.row > div {
padding: 10px;
}
logs.component.ts
import { Component, OnInit } from '@angular/core';
import { ProcessesList } from './mock_data';
@Component({
selector: 'app-logs',
templateUrl: './logs.component.html',
styleUrls: ['./logs.component.css']
})
export class LogsComponent {
items: string[] = ProcessesList;
selected: string = '';
height: number;
containerHeight(): number {
return this.height <= 0 ? window.innerHeight : this.height;
}
resize(height: number) {
this.height = height;
}
}
这是一个相当奇怪的尝试,但它仍然没有帮助。
内部组件:
搜索边栏.component.html
<div>
<label class="sr-only" for="processName">Process Name</label>
<div class="input-group mb-2 mr-sm-2 mb-sm-0">
<div class="input-group-addon">
<md-icon>search</md-icon>
</div>
<input type="text" [(ngModel)]="searchValue" class="form-control" id="processName" placeholder="Process Name">
</div>
<div class="process-list">
<md-list>
<md-list-item *ngFor="let item of items | listFilter:searchValue">
<button md-raised-button [color]="isSelected(item) ? 'primary' : ''"
class="process-name" (click)="changeSelected(item)">
{{item}}
</button>
</md-list-item>
</md-list>
</div>
</div>
search-sidebar.component.css
.process-name {
width: 100%;
}
.process-list {
overflow-y: scroll;
}
search-sidebar.component.ts
import { Component, Input, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'app-search-sidebar',
templateUrl: './search-sidebar.component.html',
styleUrls: ['./search-sidebar.component.css']
})
export class SearchSidebarComponent {
@Input() public items: string[] = [];
@Output() selectedChanged: EventEmitter<string> = new EventEmitter<string>();
private _selected: string = '';
private searchValue: string;
changeSearch(search: string) {
this.searchValue = search;
}
isSelected(item: string) {
return this.selected === item;
}
changeSelected(selected: string) {
if (this.selected !== selected) {
this.selected = selected;
}
}
get selected() {
return this._selected;
}
set selected(selected: string) {
this._selected = selected;
this.selectedChanged.emit(this.selected);
}
}
我尽可能使用 Angular Material 2,否则纯 Bootstrap 4
【问题讨论】:
标签: angular layout bootstrap-4 angular-material2