невозможно загрузить общий модуль в загруженном компоненте в angular, см. описание - PullRequest
0 голосов
/ 05 марта 2020

У меня есть следующая структура в моем приложении angular:

App:  
     'auth' => lazyload AuthModule  
          (some auth routes which is working fine and not required for this question)

  '' => lazyload MainSiteModule:
          'home' => HomeComponent  
          'photos' => PhotosComponet
          'managment' => lazyload ManagmentModule
              '' => DashBoard Area
              'edit-profile' => 'EditProfileComponent'

Сейчас в ManagmentModule или любом модуле, который я лениво загружаю в MainSiteModule (который сам по себе является модулем с отложенной загрузкой), я не могу использовать angular pipe, ngIf и обычные компоненты модуля, даже жестко я импортировал Shared Module в каждый лениво загруженный модуль, например модуль управления ...

SharedModule выглядит следующим образом:

import { NgModule } from '@angular/core';
import { CommentComponent } from './comment-form/comment-form.component';
import { PostCommentsComponent } from './post-comments/post-comments.component';
import { PostComponent } from './post/post.component';
import { PeopleItemRemoveComponent } from './people-item-remove/people-item-remove.component';
import { CommonModule } from '@angular/common';
import { RouterModule } from '@angular/router';

@NgModule({
    declarations: [
        CommentComponent,
        PostCommentsComponent,
        PostComponent,
        PeopleItemRemoveComponent
    ],
    imports: [CommonModule, RouterModule],
    exports: [PostComponent, PeopleItemRemoveComponent, CommentComponent, PostCommentsComponent]
})
export class SharedModule { }

Я 101% уверены, что в импорте нет ничего плохого, но если вам нужно то, что находится внутри модулей, вот для вас

Модуль приложения:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { AuthInterceptor } from './interceptors/auth.intercepter';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    HttpClientModule
  ],
  providers: [
    { provide: HTTP_INTERCEPTORS, multi: true, useClass: AuthInterceptor }
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

Модуль маршрутизации приложения:

import { NgModule } from '@angular/core';
import { Routes, RouterModule, PreloadAllModules } from '@angular/router';
import { MainSiteGuard } from './guards/mainsite-guard.service';
import { AuthGuard } from './guards/auth-guard.service';


const routes: Routes = [
  { 
    path: 'auth', 
    canLoad: [AuthGuard],
    loadChildren: () => import('./auth/auth.module').then(m => m.AuthModule) 
  },
  { 
    path: '', 
    canLoad: [MainSiteGuard],
    loadChildren: () => import('./main-site/main-site.module').then(m => m.MainSiteModule) 
  }
];

@NgModule({
  imports: [RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })],
  exports: [RouterModule]
})
export class AppRoutingModule { }

Модуль основного сайта:

import { NgModule } from '@angular/core';
import { ToggleActiveClassDirective } from './shared-directives/toggle-active-class.directive';
import { HeaderComponent } from './header/header.component';
import { HomeComponent } from './home/home.component';
import { SharedModule } from './shared-components/shared.module';
import { NewTextPostComponent } from './home/new-text-post/new-text-post.component';
import { MainSiteComponent } from './main-site.component';
import { MainSiteRoutingModule } from './main-site-routing.module';
import { PhotosComponent } from './photos/photos.component';
import { NewPhotoPostComponent } from './photos/new-photo-post/new-photo-post.component';
import { PeopleComponent } from './people/people.component';
import { SearchUserComponent } from './people/search-user/search-user.component';
import { FollowedUsersComponent } from './people/followed-users/followed-users.component';
import { FollowersComponent } from './people/followers/followers.component';
import { BlockedUsersComponent } from './people/blocked-users/blocked-users.component';
import { ChatComponent } from './chat/chat.component';

@NgModule({
    declarations: [
        ToggleActiveClassDirective,
        HeaderComponent,
        MainSiteComponent,
        HomeComponent,
        NewTextPostComponent,
        PhotosComponent,
        NewPhotoPostComponent,
        PeopleComponent,
        SearchUserComponent,
        FollowedUsersComponent,
        FollowersComponent,
        BlockedUsersComponent,
        ChatComponent
    ],
    imports: [
        SharedModule,
        MainSiteRoutingModule
    ]
})
export class MainSiteModule { }

Модуль маршрутизации основного сайта:

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { MainSiteComponent } from './main-site.component';
import { HomeComponent } from './home/home.component';
import { PhotosComponent } from './photos/photos.component';
import { PeopleComponent } from './people/people.component';
import { SearchUserComponent } from './people/search-user/search-user.component';
import { FollowedUsersComponent } from './people/followed-users/followed-users.component';
import { FollowersComponent } from './people/followers/followers.component';
import { BlockedUsersComponent } from './people/blocked-users/blocked-users.component';
import { ChatComponent } from './chat/chat.component';
import { PostCommentsComponent } from './shared-components/post-comments/post-comments.component';
import { MainSiteGuard } from '../guards/mainsite-guard.service';

const routes: Routes = [
    {
        path: '', component: MainSiteComponent, canLoad: [MainSiteGuard], canActivate: [MainSiteGuard], canActivateChild: [MainSiteGuard], children: [
            { path: '', pathMatch: 'full', redirectTo: '/home' },
            { path: 'home', component: HomeComponent },
            { path: 'photos', component: PhotosComponent },
            {
                path: 'people', component: PeopleComponent, children: [
                    { path: '', redirectTo: '/people/search', pathMatch: 'full' },
                    { path: 'search', component: SearchUserComponent },
                    { path: 'followed', component: FollowedUsersComponent },
                    { path: 'followers', component: FollowersComponent },
                    { path: 'blocked', component: BlockedUsersComponent }
                ]
            },
            { path: 'chat', component: ChatComponent },
            {
                path: 'post', children: [
                    { path: 'comments', component: PostCommentsComponent }
                ]
            },
            { path: 'managment', loadChildren: () => import('./managment/managment.module').then(m => m.ManagmentModule) }
        ]
    }
];

@NgModule({
    imports: [RouterModule.forChild(routes)],
    exports: [RouterModule]
})
export class MainSiteRoutingModule { }

Модуль управления:

import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { NgModule } from '@angular/core';
import { SharedModule } from '../shared-components/shared.module';
import { ManagmentMenuComponent } from './managment-menu/managment-menu.component';
import { ManagmentRoutingModule } from './managment-routing.module';
import { TermsAndConditionsComponent } from './terms-and-conditions/terms-and-conditions.component';
import { ContactUsComponent } from './contact-us/contact-us.component';
import { AboutComponent } from './about/about.component';
import { FeedbackComponent } from './feedback/feedback.component';
import { UserProfileComponent } from './user-profile/user-profile.component';
import { EditProfileComponent } from './edit-profile/edit-profile.component';
import { UserAboutComponent } from './user-profile/user-about/user-about.component';
import { UserPostsComponent } from './user-profile/user-posts/user-posts.component';
import { UserPhotosComponent } from './user-profile/user-photos/user-photos.component';

@NgModule({
    declarations: [
        ManagmentMenuComponent,
        UserProfileComponent,
        UserAboutComponent,
        UserPostsComponent,
        UserPhotosComponent,
        EditProfileComponent,
        TermsAndConditionsComponent,
        ContactUsComponent,
        FeedbackComponent,
        AboutComponent
    ],
    imports: [
        SharedModule,
        ManagmentRoutingModule,
        FormsModule,
        ReactiveFormsModule
    ]
})
export class ManagmentModule { }

Модуль маршрутизации управления:

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { ManagmentMenuComponent } from './managment-menu/managment-menu.component';
import { TermsAndConditionsComponent } from './terms-and-conditions/terms-and-conditions.component';
import { ContactUsComponent } from './contact-us/contact-us.component';
import { AboutComponent } from './about/about.component';
import { FeedbackComponent } from './feedback/feedback.component';
import { UserProfileComponent } from './user-profile/user-profile.component';
import { EditProfileComponent } from './edit-profile/edit-profile.component';
import { UserAboutComponent } from './user-profile/user-about/user-about.component';
import { UserPostsComponent } from './user-profile/user-posts/user-posts.component';
import { UserPhotosComponent } from './user-profile/user-photos/user-photos.component';

const routes: Routes = [
    { path: '', component: ManagmentMenuComponent, pathMatch: 'full' },
    { path: 'profile', component: UserProfileComponent, children: [
        { path: '', pathMatch: 'full', redirectTo: '/managment/profile/about' },
        { path: 'about', component: UserAboutComponent },
        { path: 'posts', component: UserPostsComponent },
        { path: 'photos', component: UserPhotosComponent }
    ]},
    { path: 'profile/edit', component: EditProfileComponent },
    { path: 'terms&conditions', component: TermsAndConditionsComponent },
    { path: 'contact-us', component: ContactUsComponent },
    { path: 'feedback', component: FeedbackComponent },
    { path: 'about', component: AboutComponent }
];



@NgModule({
    imports: [RouterModule.forChild(routes)],
    exports: [RouterModule]
})
export class ManagmentRoutingModule { }

А теперь на маршруте «профиль / редактировать», который находится внутри управления модуль:
Изображение ошибки * ngЕсли не найден

Пожалуйста, помогите мне, как решить эту проблему, Angular Версия = 9 .

1 Ответ

1 голос
/ 05 марта 2020

Чтобы сделать CommonModule доступным для модулей, импортирующих ваш SharedModule, вы должны добавить CommonModule в exports раздел вашего SharedModule.

@NgModule({
    declarations: [
        CommentComponent,
        PostCommentsComponent,
        PostComponent,
        PeopleItemRemoveComponent
    ],
    imports: [CommonModule, RouterModule],
    exports: [CommonModule, PostComponent, PeopleItemRemoveComponent, CommentComponent, PostCommentsComponent]
})
export class SharedModule { }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...