Невозможно выполнить привязку к «ngIf», так как это неизвестное свойство «md-card-title».

Я изучаю Angular2 RC5 с библиотеками материалов Angular2 и запускаю его в AspNetCore 1.0 приложении, используя VisualStudio 2015.. Я взял отлично работающее Angular2 RC5 одностраничное приложение и попытался ввести ленивую загрузку, при которой сначала загружается только страница входа. Когда я успешно вошел в систему, я хочу загрузить оставшиеся страницы.

Когда я нажимал кнопку входа в режим SPA, я успешно перенаправлялся на страницу DashboardComponent, которая была предварительно загружена со страницей входа — это было до того, как я ввел ленивую загрузку. После выполнения этого руководства теперь я получаю эти ошибки

Фрагмент кода ошибки

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? Это работало до того, как я переместил панель инструментов, чтобы загрузить ленивую публикацию об успешном входе в систему.

Я прошел весь путь, пока не использовал подход с общими модулями в ссылке, которую я разместил выше. Не является ли использование общих модулей причиной этой проблемы? Я предположил, что совместное использование модулей — это способ очистить код, а не повторять вещи, когда все работает, и не более того.

Моя информационная панель похожа на страницу HeroesList в ссылке, которую я перехожу выше, где она загружает еще несколько страниц в ту минуту, когда загружается DashboardModule. Я поставил точки останова на странице Dashboard на стороне MVC и подтвердил, что Dashboard и последующие страницы загружаются лениво только при успешном входе в систему.

Ошибка выглядит так, как будто она не может получить ссылку на основные угловые ссылки и/или библиотеки материалов angular2. Я поместил все эти импорты, перечисленные здесь, во все модули, которые будут иметь их, кроме модулей маршрутизации.

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 {}

person user20358    schedule 17.10.2016    source источник
comment
Вы пытались обернуть ‹md-card-title› внутри ‹div›, содержащего ng-if: <div ng-if="!showMessage && !isApproved"> <md-card-title></md-card-title> </div>   -  person mika    schedule 18.10.2016
comment
Я сделал и получил эту ошибку Can't bind to 'ngIf' since it isn't a known property of 'div'. ("   -  person user20358    schedule 18.10.2016
comment
stackoverflow.com/questions/39058075/   -  person mika    schedule 18.10.2016
comment
Где находится <md-card-title *ngIf="!showMessage && !isApproved">. Добавьте относительный шаблон к своему сообщению.   -  person nlyk    schedule 18.10.2016
comment
Какую версию материала вы используете? Лучше перейти на Angular 2.0 final и последнюю версию материала (2.0.0-alpha.9-3)   -  person nlyk    schedule 18.10.2016
comment
Использование материала 2.0 альфа 8-2   -  person user20358    schedule 18.10.2016
comment
@nlyk: фрагмент <md-card-title *ngIf="!showMessage && !isApproved"> является частью страницы ReportList, которая поддерживается компонентом ReportList. Компонент Dashboard содержит тег router-module для загрузки маршрутов в   -  person user20358    schedule 18.10.2016
comment
@user20358 user20358 Подобные журналы ошибок, с которыми я сталкиваюсь, когда модуль материалов не загружен. Я не знаком с используемой вами версией. В моем проекте я просто включаю MaterialModule в свойство импорта метаданных моего модуля.   -  person nlyk    schedule 18.10.2016
comment
Я тоже это сделал. По крайней мере, я думаю, что у меня есть   -  person user20358    schedule 18.10.2016
comment
Я даже не могу привязать ngIf к тегу <div .... Это должно означать, что даже библиотеки angular не загружены. Почему это так? Куда все это нужно ввозить и декларировать?   -  person user20358    schedule 18.10.2016


Ответы (2)


Компонент Dashboard теперь является частью другого модуля, и вам нужно импортировать CommonModule в этот модуль, чтобы использовать директиву *ngIf. Вам не нужно импортировать CommonModule в AppModule, потому что вы импортируете BrowserModule туда, а BrowserModule импортирует, а затем экспортирует CommonModule, что означает, что вы автоматически получаете CommonModule при импорте BrowserModule.

person Stefan Svrkota    schedule 17.10.2016
comment
Модуль панели мониторинга или компонент? - person user20358; 18.10.2016
comment
@ user20358 Вам нужно добавить CommonModule к импорту DashboardModule. - person Stefan Svrkota; 18.10.2016
comment
@ user20358 Не могли бы вы добавить код DashboardComponent и DashboardModule в свой пост? - person Stefan Svrkota; 18.10.2016
comment
в порядке. Это займет некоторое время, так как я должен очистить ненужные биты. Сделаю это как можно скорее. - person user20358; 18.10.2016
comment
Готово. Можете ли вы взглянуть, пожалуйста? - person user20358; 18.10.2016
comment
@ user20358 Почему ваше объявление DashboardComponent закомментировано? Там надо объявить. - person Stefan Svrkota; 18.10.2016
comment
Мне также нужен DashboardComponent в модуле маршрутизации, чтобы логин переходил на страницу DashBoard. Обновленный вопрос с файлом dashboard-routing.module.ts. Без модуля dashboardRouting навигация невозможна. Когда DashboardComponent не прокомментирован, я получаю эту ошибку: Uncaught (in promise): Type DashboardComponent is part of the declarations of 2 modules: DashboardRoutingModule and DashboardModule! - person user20358; 18.10.2016
comment
Если вам нужно использовать один компонент в двух модулях, вы можете сделать третий модуль, назовем его SharedModule, а затем объявить и ЭКСПОРТИРОВАТЬ (это обязательно!) DashboardComponent из SharedModule. После этого вам нужно импортировать SharedModule в DashboardRoutingModule и DashboardModule. Это решение вашей проблемы. - person Stefan Svrkota; 18.10.2016
comment
ой. Я думал, что общий модуль предназначен только для поддержания чистоты. Позвольте мне попробовать это и отчитаться. Спасибо Стефан :) - person user20358; 18.10.2016
comment
хорошо, проблема *ngIf="!showMessage && !isApproved" была решена, но теперь на странице у меня есть еще один угловой компонент дизайна материалов, который все еще не собирается. Can't bind to 'value' since it isn't a known property of 'md-progress-bar'. {{report.completedVal}} % <md-progress-bar mode="determinate" [ERROR ->][value]="report.completedVal" style="width:90%;"></md-progress-bar> - person user20358; 18.10.2016
comment
@user20358 user20358 Что ж, проблема, о которой вы спрашивали в своем вопросе, решена, ошибка, которую вы получаете сейчас, не имеет ничего общего с исходной проблемой. - person Stefan Svrkota; 18.10.2016
comment
на самом деле это был всего лишь фрагмент полной ошибки. в основном все ссылки на angular не распознавались. Я предполагаю, что это произошло из-за того, что модули не загружались, поскольку они не были разделены, как вы правильно указали. Теперь, когда обязательный общий модуль создан и на него есть ссылка, я не понимаю, почему одни директивы angular работают, а другие нет. - person user20358; 18.10.2016
comment
Я уже импортирую модуль браузера, но все равно получаю сообщение об ошибке «не могу связать ngif». - person Kokodoko; 04.11.2016

Сегодня я столкнулся с такой ошибкой с ionic 5, потому что я удалил строку маршрутизатора, которая отвечала за эту страницу, потому что она была модальной. Ни * ngIf, ни * ngFor не работали, пока я не поместил ссылки обратно внутри файл app.routing

person Chris Golden    schedule 09.02.2021
comment
Это был именно мой опыт. Я добавил модули, которые были задуманы как модальные, поэтому я не думал, что мне нужны линии маршрутизатора. Все работало, пока я не попытался добавить *ngIf в шаблон. - person smatthews1999; 20.02.2021