angular - 无法绑定(bind)到 'ngIf',因为它不是 'md-card-title' 的已知属性

标签 angular angular2-routing angular-material2

我正在使用 Angular2 Material 库学习 Angular2 RC5,并使用 VisualStudio 2015 让它在 AspNetCore 1.0 应用程序中运行。完美运行 Angular2 RC5 单页应用程序,并尝试引入延迟加载,只有登录页面会首先加载。成功登录后,我想加载剩余的页面。

当我在 SPA 模式下单击登录按钮时,我将成功重定向到预加载了登录页面的 DashboardComponent 页面——那是在我引入延迟加载之前。 关注this tutorial后我现在得到这些错误

错误片段

EXCEPTION: Error: Uncaught (in promise): Template parse errors: Can't bind      to 'ngIf' since it isn't a known property of 'md-card-title'.
1. If 'md-card-title' is an Angular component and it has 'ngIf' input, then verify that it is part of this module.
2. If 'md-card-title' is a Web Component then add "CUSTOM_ELEMENTS_SCHEMA" to the '@NgModule.schema' of this component to suppress this message.  ("


        <md-card-title [ERROR ->]*ngIf="!showMessage && !isApproved">
            Please use the information below...
        </md-card-title> "): ReportListComponent@63:23 Property binding ngIf not used by any directive on an embedded template. Make sure that the property name is spelled correctly and all directives are listed in the "directives" section. ("

为什么 ngIf 指令突然不起作用?在我移动仪表板以在登录成功后延迟加载之前,它一直在工作。

我一直在使用上面发布的链接中的共享模块方法。没有使用共享模块是导致此问题的原因吗?我认为模块共享是一种清理代码的方式,一旦一切正常就不会重复一些东西,仅此而已。

我的 Dashboard 类似于我在上面的链接中的 HeroesList 页面,在加载 DashboardModule 的那一刻它会加载更多页面。我在 MVC 端的仪表板页面中放置了断点,并确认仪表板和之后的页面仅在成功登录时才会延迟加载。

错误似乎无法获得核心 Angular 引用和/或 angular2 Material 库的引用。我已将此处列出的所有这些导入放入除路由模块之外的所有模块中

import { NgModule }         from '@angular/core';
import { FormsModule } from '@angular/forms';

import { BrowserModule } from '@angular/platform-browser';
import { HttpModule }    from '@angular/http';
import { RouterModule } from '@angular/router';

import { MdRadioModule } from '@angular2-material/radio';
import { MdToolbarModule } from '@angular2-material/toolbar';
import { MdButtonModule } from '@angular2-material/button';
import { MdIconModule } from '@angular2-material/icon';
import { MdProgressBarModule } from '@angular2-material/progress-bar';
import { MdListModule } from '@angular2-material/list';
import { MdInputModule } from '@angular2-material/input';
import { MdCardModule } from '@angular2-material/card';

我仍然收到上面代码段中的错误。我可能会错过什么? 感谢任何帮助或提示。

编辑

Dashboard.Module.ts

import { NgModule }         from '@angular/core';
import { CommonModule }     from '@angular/common';
import { FormsModule } from '@angular/forms';


import { HttpModule }    from '@angular/http';
import { RouterModule } from '@angular/router';

import { MdRadioModule } from '@angular2-material/radio';
import { MdToolbarModule } from '@angular2-material/toolbar';
import { MdButtonModule } from '@angular2-material/button';
import { MdIconModule } from '@angular2-material/icon';
import { MdProgressBarModule } from '@angular2-material/progress-bar';
import { MdListModule } from '@angular2-material/list';
import { MdInputModule } from '@angular2-material/input';
import { MdCardModule } from '@angular2-material/card';

import { AppService } from './app.service';

import { DashboardRoutingModule }  from './Dashboard-routing.Module';

@NgModule({
    imports: [  
                CommonModule, HttpModule, FormsModule, RouterModule, 
                MdRadioModule, MdToolbarModule, MdProgressBarModule,
                MdButtonModule, MdIconModule, MdListModule,
                MdCardModule, MdInputModule, MdToolbarModule,
                DashboardRoutingModule],
  /*declarations: [  DashboardComponent ],*/
  exports:      [  CommonModule  ],
  providers:    [ AppService ]
})
export class DashboardModule { }

DashBoardComponent.ts

import { Component }   from '@angular/core';

import { AppService } from './app.service';

@Component({

  template: `
    <router-outlet></router-outlet>
  `
})
export class DashboardComponent {
  userName = '';
  constructor(service: AppService) {
    //this.userName = service.userName;
  }
}

dashboard-routing.Module.ts

import { NgModule }            from '@angular/core';
import { Routes, RouterModule }        from '@angular/router';

import { FormsModule } from '@angular/forms';
import { CommonModule }     from '@angular/common';
import { HttpModule }    from '@angular/http';

import { MdRadioModule } from '@angular2-material/radio';
import { MdToolbarModule } from '@angular2-material/toolbar';
import { MdButtonModule } from '@angular2-material/button';
import { MdIconModule } from '@angular2-material/icon';
import { MdProgressBarModule } from '@angular2-material/progress-bar';
import { MdListModule } from '@angular2-material/list';
import { MdInputModule } from '@angular2-material/input';
import { MdCardModule } from '@angular2-material/card';


import { DashboardComponent } from './DashBoardComponent';
import { ReportListComponent }  from './ReportListComponent';
import { ReportDetailComponent }  from './ReportDetailComponent';


const routes: Routes = [
  { 
    children: [
      { path: 'Home/ReportList',    component: ReportListComponent },
      { path: 'Home/ReportDetail/:reportId', component: ReportDetailComponent }
    ]
  }
];


@NgModule({
    imports: [RouterModule.forChild([routes])  
    ],
  declarations: [ DashboardComponent, ReportListComponent, ReportDetailComponent ],
  exports: [RouterModule, ReportListComponent, ReportDetailComponent, CommonModule]
})


export class DashboardRoutingModule {}

最佳答案

Dashboard 组件现在是另一个模块的一部分,您需要将 CommonModule 导入该模块才能使用 *ngIf 指令。您不需要将 CommonModule 导入到您的 AppModule,因为您在那里导入了 BrowserModule,然后 BrowserModule 导入,然后导出 CommonModule,这意味着您在导入 BrowserModule 时自动获得 CommonModule

关于angular - 无法绑定(bind)到 'ngIf',因为它不是 'md-card-title' 的已知属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40096647/

相关文章:

angular - 使用响应式表单时禁用(设为只读)mat-datepicker 上的文本输入

cordova - 将 ionic 应用程序部署为网站

angularjs - Angular 2 路由 : Refresh page with parameter get "Fail to load resource" error

Angular2在路由不活动时添加类

asp.net - MVC 5 & Angular 2 Multiple "Siloed"应用程序结构建议

angular - 如何实现 Angular 4 Material Sidenav 组件?

angular - 模板驱动和响应式表单之间的实际区别是什么?

angular - 如何将 forkJoin 数据分配给变量?

angular - 如何使 mat-table 行拖放与 cdkDragHandle 一起工作,以便只能使用句柄拖动该行?

angular - 加速 Angular Material 自动完成或替代方案