Masalahnya: Ketika saya melakukan ng build saya mendapatkan kesalahan ini:

No module factory available for dependency type: ContextElementDependency
Error: No module factory available for dependency type: ContextElementDependency
    at addDependency (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:696:12)
    at iterationOfArrayCallback (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:194:3)
    at addDependenciesBlock (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:714:5)
    at iterationOfArrayCallback (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:194:3)
    at addDependenciesBlock (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:717:5)
    at Compilation.processModuleDependencies (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:725:4)
    at afterBuild (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:857:15)
    at buildModule.err (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:901:11)
    at callback (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:630:5)
    at module.build.error (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:678:12)
    at resolveDependencies (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/ContextModule.js:282:4)
    at ContextModule.result.resolveDependencies (/Users/kazuar/Projects/EducationFrontEnd/node_modules/@ngtools/webpack/src/angular_compiler_plugin.js:504:25)
    at ContextModule.build (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/ContextModule.js:203:8)
    at Compilation.buildModule (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:635:10)
    at factory.create (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:884:14)
    at hooks.afterResolve.callAsync (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/ContextModuleFactory.js:163:16)

Saya ingin mengatakan terlebih dahulu bahwa masalah ini dimulai hanya ketika saya mengubah perutean menjadi pemuatan malas dari pemuatan yang bersemangat. Ketika saya mencoba kembali ke pemuatan yang bersemangat, saya tidak memiliki masalah ini sehingga mungkin terhubung dengan itu, tetapi saya tidak tahu apa penyebabnya

Beginilah tampilan tabel perutean saya dengan pemuatan yang bersemangat:

// Routing array - using eager loading
const appRoutes: Routes = [
  { path: 'login/:id', canActivate: [AuthGuard], children: [] },
  { path: '', canActivateChild: [AuthGuard], children: [
    { path: '', redirectTo: '/courses', pathMatch: 'full' },
    { path: 'courses', component: CourseListComponent,  pathMatch: 'full'},
    { path: 'courses/:courseId', component: CourseDetailComponent, pathMatch: 'full' },
    { path: 'courses/:courseId/unit/:unitId', component: CoursePlayComponent,
      children: [
        { path: '', component: CourseListComponent },
        { path: 'lesson/:lessonId', component: CourseLessonComponent, data:{ type: 'lesson'} },
        { path: 'quiz/:quizId', component: CourseQuizComponent, data: {type: 'quiz'} }
      ]}
    ]},
  { path: 'welcome', component: LandingPageComponent, pathMatch: 'full' },
  { path: '**', component: PageNotFoundComponent, pathMatch: 'full' }];

Ini dengan pemuatan malas:

// app-routing.module

const routes:Routes = [
  { path: 'welcome', component: LandingPageComponent, pathMatch: 'full' },
  { path: 'login/:id', canActivate: [AuthGuard], children: [] },
  { path: '', canActivateChild: [AuthGuard], children: [
    { path: '', redirectTo: '/courses', pathMatch: 'full' },
    { path: 'courses', loadChildren: './courses/course.module#CourseModule', canLoad: [AuthGuard] }
  ]},
  { path: '**', component: PageNotFoundComponent, pathMatch: 'full' }
]


// course-routing.module

const routes:Routes = [
  {
    path: '',
    component: CourseListComponent,
    canActivate: [AuthGuard],
    canActivateChild: [AuthGuard],
    children:[
      { path: '', redirectTo: '/courses', pathMatch: 'full' },
      { path: ':courseId', component: CourseDetailComponent, pathMatch: 'full' },
      { path: ':courseId/unit/:unitId', component: CoursePlayComponent,
        children: [
          { path: '', component: CourseListComponent },
          { path: 'lesson/:lessonId', component: CourseLessonComponent, data:{ type: 'lesson'} },
          { path: 'quiz/:quizId', component: CourseQuizComponent, data: {type: 'quiz'} }
      ]}
  ]}
]

Auth.guard:

import { Injectable } from '@angular/core';
import { Observable, throwError } from 'rxjs';
import { Router, CanActivate, CanActivateChild, CanLoad, ActivatedRouteSnapshot, RouterStateSnapshot, NavigationExtras, Route } from '@angular/router';
import { AuthUserService } from './users/auth-user.service';
import { LocalStorage } from '@ngx-pwa/local-storage';

@Injectable()
export class AuthGuard implements CanActivate , CanActivateChild {

    constructor(private authUserService: AuthUserService, private router: Router) {   }

    canActivate(route: ActivatedRouteSnapshot, state:
       RouterStateSnapshot): boolean |
       Observable<boolean> | Promise<boolean> {
         // save the id from route snapshot
         const id = +route.params.id;
         const course_id = +route.params.courseId;

         // if you try to logging with id
         if (id) {
           this.router.navigate(["/courses"]);
           return this.authUserService.login(id);
         }
         // if you're already logged in and navigate between pages
         else if (this.authUserService.isLoggedIn()){
           if (course_id){
             // check if someone try to access a locked course
             if (this.authUserService.isCourseNotPartOfTheSubscription(course_id)){
               this.router.navigate(["/welcome"]);
               return false;
             }
             else
               return true;
           }
           else
             return true;
         }
         else {
           this.router.navigate(["/welcome"]);
           return false;
         }
        }

      canActivateChild(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): boolean |
      Observable<boolean> | Promise<boolean> {
         return this.canActivate(route, state);
       }

       canLoad(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): boolean |
       Observable<boolean> | Promise<boolean> {
         return this.canActivate(route, state);
       }
}

Saya menambahkan impor di tempat yang tepat dan mengikuti 3 tutorial berbeda. Saya benar-benar tidak tahu apa masalahnya. Terima kasih semua

0
Ofir Sasson 2 April 2019, 11:44

1 menjawab

Jawaban Terbaik

Saya menyelesaikannya, paket web saya tidak diperbarui dan tidak mendukung pemuatan malas jadi saya menghapusnya dan menginstal yang terbaru dan berhasil

0
Ofir Sasson 3 April 2019, 11:32