Angular 角度材质2 md表格无法渲染

Angular 角度材质2 md表格无法渲染,angular,rendering,angular-material2,Angular,Rendering,Angular Material2,我目前正在实施角材料2的新md表 它确实可以工作,包括过滤器。但是当我重新加载表格所在的页面时,表格将不会显示。当我单击按钮或过滤器输入时,它会被渲染 代码如下: <md-toolbar color="primary" class="mat-elevation-z8"> Projects <span class="fill-remaining-space"></span> <button md-button (click)="op

我目前正在实施角材料2的新md表

它确实可以工作,包括过滤器。但是当我重新加载表格所在的页面时,表格将不会显示。当我单击按钮或过滤器输入时,它会被渲染

代码如下:

<md-toolbar color="primary" class="mat-elevation-z8">
    Projects
    <span class="fill-remaining-space"></span>
    <button md-button (click)="openProjectDialog()">
        <md-icon>add</md-icon>
    </button>
</md-toolbar>
<div class="inner-sidenav-content">
    <div class="mat-elevation-z5">
        <div class="table-header">
            <md-input-container floatPlaceholder="never">
                <input mdInput #filter placeholder="Filter projects">
            </md-input-container>
        </div>

        <md-table #table [dataSource]="dataSource">
            <!-- ID column -->
            <ng-container cdkColumnDef="id">
                <md-header-cell *cdkHeaderCellDef>ID</md-header-cell>
                <md-cell *cdkCellDef="let row">{{row.id}}</md-cell>
            </ng-container>

            <!-- Project number column -->
            <ng-container cdkColumnDef="number">
                <md-header-cell *cdkHeaderCellDef>Number</md-header-cell>
                <md-cell *cdkCellDef="let row">{{row.number}}</md-cell>
            </ng-container>

            <!-- Project name column -->
            <ng-container cdkColumnDef="name">
                <md-header-cell *cdkHeaderCellDef>Name</md-header-cell>
                <md-cell *cdkCellDef="let row">{{row.name}}</md-cell>
            </ng-container>

            <md-header-row *cdkHeaderRowDef="displayedColumns"></md-header-row>
            <md-row *cdkRowDef="let row; columns: displayedColumns;"></md-row>
        </md-table>
    </div>
</div>
当我重新加载页面时:

当我在重新加载后单击某个内容时,它应该是什么样子:


有人知道问题出在哪里吗?提前谢谢

如果您的代码有问题,我会丢失它。你可能想

作为一种解决方法,我会尝试在


如果你的代码有问题,我就找不到了。你可能想

作为一种解决方法,我会尝试在


我不知道为什么它不起作用。哪个版本的Angular?RxJS的
npm ls@angular/core rxjs
感谢您的回复@棱角的/core@4.2.6及rxjs@5.4.2No问题我写了一个可能的解决办法。我不知道为什么它不起作用。哪个版本的Angular?RxJS的
npm ls@angular/core rxjs
感谢您的回复@棱角的/core@4.2.6及rxjs@5.4.2No问题我写了一个可能的解决方法。谢谢你的这个想法,我不知道ChangeDetectorRef:),但不幸的是,它没有解决问题。我刚刚注意到一件事:即使我通过F12打开或关闭devTools,表仍然可见。@Lados如果您将
detector.markForCheck()
替换为
detector.detectChanges()
?我已经改变了我的回答谢谢,这对我很有用!:)这其中有一个问题:谢谢你的想法,我不知道ChangeDetectorRef:),但不幸的是,它没有解决问题。我刚刚注意到一件事:即使我通过F12打开或关闭devTools,表仍然可见。@Lados如果您将
detector.markForCheck()
替换为
detector.detectChanges()
?我已经改变了我的回答谢谢,这对我很有用!:)这其中有一个问题:
import {Component, ElementRef, OnInit, ViewChild} from '@angular/core';
import {Project} from '../../models/project';
import {BehaviorSubject} from 'rxjs/BehaviorSubject';
import {DataSource} from '@angular/cdk';
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/startWith';
import 'rxjs/add/observable/merge';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/debounceTime';
import 'rxjs/add/operator/distinctUntilChanged';
import 'rxjs/add/observable/fromEvent';
import {MdDialog} from '@angular/material';
import {ProjectDialogComponent} from '../../components/project-modal/project-dialog.component';

@Component({
    selector: 'wtc-projects',
    templateUrl: './projects.component.html',
    styleUrls: ['./projects.component.scss']
})
export class ProjectsComponent implements OnInit {
    displayedColumns = ['id', 'number', 'name'];
    exampleDatabase = new ExampleProjectDatabase();
    dataSource: ExampleProjectSource | null;

    @ViewChild('filter') filter: ElementRef;

    constructor(public dialog: MdDialog) {
    }

    ngOnInit() {
        this.dataSource = new ExampleProjectSource(this.exampleDatabase);

        Observable.fromEvent(this.filter.nativeElement, 'keyup')
            .debounceTime(150)
            .distinctUntilChanged()
            .subscribe(() => {
                if (!this.dataSource) {
                    return;
                }
                this.dataSource.filter = this.filter.nativeElement.value;
            });
    }

    openProjectDialog(): void {
        const newProject = new Project();
        const dialogRef = this.dialog.open(ProjectDialogComponent, {
            data: newProject
        });
        dialogRef.afterClosed().subscribe(result => {
            if (result) {
                this.exampleDatabase.addProject(result);
            }
        });
    }

}

export class ExampleProjectDatabase {
    // Stream that emits whenever the data has been modified
    dataChange: BehaviorSubject<Project[]> = new BehaviorSubject<Project[]>([]);

    get data(): Project[] {
        return this.dataChange.value;
    }

    constructor() {
        // Fill up the database
        this.addProject(new Project(1, '52342', 'Landing Pages'));
        this.addProject(new Project(2, '1234', 'Maintenance Interface'));
        this.addProject(new Project(3, '6576', 'Mobile Time Tracking app'));
        this.addProject(new Project(4, '52342', 'TYPO3 Website'));
    }

    // Adds new project to the database
    addProject(project: Project) {
        const copiedData = this.data.slice();
        copiedData.push(project);
        this.dataChange.next(copiedData);
    }
}

export class ExampleProjectSource extends DataSource<any> {
    _filterChange = new BehaviorSubject('');

    get filter(): string {
        return this._filterChange.value;
    }

    set filter(filter: string) {
        this._filterChange.next(filter);
    }

    constructor(private _exampleDatabase: ExampleProjectDatabase) {
        super();
    }

    connect(): Observable<Project[]> {
        const displayDataChanges = [
            this._exampleDatabase.dataChange,
            this._filterChange,
        ];

        return Observable.merge(...displayDataChanges).map(() => {
            return this._exampleDatabase.data.slice().filter((item: Project) => {
                const searchStr = (item.number + item.name).toLowerCase();
                return searchStr.indexOf(this.filter.toLowerCase()) !== -1;
            });
        });
    }

    disconnect() {
    }
}
{
    path: 'projects',
    component: ProjectsComponent
},
import {ChangeDetectorRef} from '@angular/core';
...
export class ProjectsComponent implements OnInit, AfterViewInit {

  constructor(public dialog: MdDialog, private detector:ChangeDetectorRef) {
  }

  // add this
  ngAfterViewInit(){
    this.detector.detectChanges();
  }
}