【问题标题】:JW Angular Pagination Doesn't Work if used in Feature Module如果在功能模块中使用 JW Angular 分页将不起作用
【发布时间】:2020-11-05 11:22:27
【问题描述】:

我正在使用 Angular 10,如果我将 JW Angular Pagination 模块导入到 app.module.ts 中,然后在使用 app.component.ts 组件的视图中使用它,则它可以正常工作。但是,当我尝试将其导入自定义功能模块并使用导入功能模块的组件时,分页元素不会显示在视图模板中。 Angular 好像看不到分页模块。

App.module.ts

import { NgModule, Component, OnInit } from '@angular/core';
import { CoreModule } from "./core/core.module"
import { MessageModule } from "./messages/message.module";
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import * as $ from 'jquery';
import { BrowserModule } from '@angular/platform-browser';
import { AuthService } from "./model/auth.service"
import { JwPaginationModule } from 'jw-angular-pagination';






@NgModule({
  imports: [AppRoutingModule, MessageModule, CoreModule, BrowserModule, JwPaginationModule],
  declarations: [AppComponent,],  
  providers: [AuthService],
  bootstrap: [AppComponent]
})
export class AppModule {
}

Core.module.ts

import { NgModule } from "@angular/core";
import { ModelModule } from "../model/model.module";
import { FormsFeatureModule } from "../view/forms.module";
import { ViewFeatureModule } from "../view/view.module";
import { routing } from "../app.routing";
import { MessageModule } from "../messages/message.module";
import { MessageService } from "../messages/message.service";
import { Message } from "../messages/message.model";
import { AuthService } from "../model/auth.service";
import { EncrDecrService } from '../utils/EncrDecr.service';
import { CommonModule } from '@angular/common';



//import { NotFoundComponent } from "./notFound.component";
//import { UnsavedGuard } from './unsaved.guard';


@NgModule({
  imports: [ModelModule, MessageModule, routing, FormsFeatureModule, ViewFeatureModule, CommonModule],
  declarations: [],
  exports: [ModelModule, FormsFeatureModule, ViewFeatureModule, MessageModule ],
  providers: [AuthService, EncrDecrService],
  
})


export class CoreModule {
  
}

Forms.module.ts

import { NgModule } from "@angular/core";
import { FormsModule, Validators, FormGroup, FormBuilder, NgForm } from '@angular/forms';
import { ReactiveFormsModule } from '@angular/forms';
import { BrowserModule } from '@angular/platform-browser';
import { RouterModule } from '@angular/router';
//import { NotFoundComponent } from "./notFound.component";
//import { UnsavedGuard } from './unsaved.guard';
import { ActivatedRoute, Router } from "@angular/router";
import { AuthService } from "../model/auth.service";
import { JwPaginationModule } from 'jw-angular-pagination';


@NgModule({
  imports: [FormsModule, ReactiveFormsModule, BrowserModule, RouterModule, JwPaginationModule],
  declarations: [],
  exports: [FormsModule, ReactiveFormsModule, RouterModule, JwPaginationModule],
  providers: [AuthService],
  
})


export class FormsFeatureModule {

  constructor(private router: Router) { }

View.module.ts

import { RecipeViewComponent } from "../view/recipeView.component";
import { NgModule } from "@angular/core";
import { FormsModule } from '@angular/forms';
import { ReactiveFormsModule } from '@angular/forms';
import { BrowserModule } from '@angular/platform-browser';
import { RouterModule } from '@angular/router';
import { HomePageComponent } from "./homePage.component";
import { AdminComponent } from "../admin/admin.component";
import { AuthService } from "../model/auth.service";
//import { NotFoundComponent } from "./notFound.component";
//import { UnsavedGuard } from './unsaved.guard';


@NgModule({
  imports: [FormsModule, ReactiveFormsModule, BrowserModule, RouterModule],
  declarations: [RecipeViewComponent, HomePageComponent, AdminComponent],
  exports: [RecipeViewComponent, HomePageComponent,AdminComponent, RouterModule],
  providers: [AuthService],
  
})


export class ViewFeatureModule { }

admin.component.ts

import { Component, Inject, DoCheck, ChangeDetectorRef, OnInit } from "@angular/core";
import { ActivatedRoute, Router } from "@angular/router";
import { ModelRepo } from "../model/repository.model";
import { Category } from "../model/category.model";
import { Ingredient } from "../model/ingredient.model";
import { RecipeBook } from "../model/recipeBook.model";
import { User } from "../model/user.model";
import { FormsFeatureModule } from "../view/forms.module"
import { ViewChild, ElementRef } from '@angular/core';
import { EncrDecrService } from '../utils/EncrDecr.service';
import { AppComponent } from '../app.component'
import { Observable, throwError } from "rxjs";


//import { MODES, SharedState, SHARED_STATE } from "./sharedState.model";
//import { Observer} from "rxjs"


@Component(



  {
    selector: "admin",
    templateUrl: "admin.component.html"
  }

)


export class AdminComponent implements OnInit {
 ModNewCategory = new Category(0,"");
  ModNewIngredient = new Ingredient(0,"");
  ModNewRecipeBook = new RecipeBook();
  selectedConfig = "categories"; //initilze for first page load
  selectedCategoryOperation = "addCategory"; //initilze for first page load
  selectedIngredientOperation = "addIngredient"; //initilze for first page load
  selectedUserOperation = "addUser"; //initilze for first page load
  userRoles = new Array<string>("visitor", "member", "administrator");
  searchRole = "";
  id;
  mode;
  operation;
  defaultObject = new Object();
  public pageOfItems: Array<any>;
  public items = [];

  constructor(public dataRepo: ModelRepo, private EncrDecr: EncrDecrService, private appComponent:AppComponent, activeRoute: ActivatedRoute, public router: Router, public fieldValidator: FormsFeatureModule) {
    
    activeRoute.params.subscribe(params => {

      this.id = params["id"];
      this.mode = params["mode"];
      this.operation = params["operation"]
      if (this.operation != null && this.mode != null) {
        this.modifyItem(this.id, this.operation);
      }
     
    }
   
    )
  }
  ngOnInit() {
    // an example array of 150 items to be paged
  //  this.items = this.dataRepo.users;
    this.items = Array(150).fill(0).map((x, i) => ({ id: (i + 1), name: `Item ${i + 1}` }));
   
  }

  onChangePage(pageOfItems: Array<any>) {
    // update current page of items
    alert('onChangePage got called');
    this.pageOfItems = pageOfItems;
  }

admin.component.html

   <div class="card text-center m-3">
      <h3 class="card-header">Angular  Pagination Example</h3>
      <div class="card-body">
        <div *ngFor="let item of pageOfItems">{{item.name}}</div>
      </div>
      <div class="card-footer pb-0 pt-3">
        <jw-pagination [items]="items" (changePage)="onChangePage($event)"></jw-pagination>
      </div>
    </div>

【问题讨论】:

  • 您是否在控制台中遇到任何错误
  • 不,控制台中没有错误或警告
  • 你能分享你在哪里声明了 admin.component.ts
  • @OwenKelvin 我在上面包含了我的模块代码,以便更深入地了解应用程序结构。我将所有功能模块导入 core.module.ts 中的一个核心模块。然后我将核心模块导入 app.module.ts。为了回答你的问题,我在 view.module.ts 中声明了 admin.component.ts

标签: node.js angular pagination angular-module angular-pagination


【解决方案1】:

问题

您正在使用 Angular10...

看看下面的声明Ivy is not complaining about unknown element inside ng-template #36171

这是由于 Ivy 的架构更改所致。在之前的编译器(ViewEngine)中,对未知元素的检查会在模板的解析过程中发生。在 Ivy 中,模板独立于相应的 NgModule 进行解析,因此范围内的组件/指令信息不可用。

相反,元素检查被推入模板类型检查阶段,并且它当前受到类型检查器配置的影响。但是,将fullTemplateTypeCheck 设置为true 时,它应该下降到模板中进行检查(当它为假时,它不会出于向后兼容性的原因)。但是,这与您在此处的陈述相冲突:

该问题只能在运行时(未呈现组件)或fullTemplateTypeCheck: true 中发现。

考虑你声明AdminComponent的模块中的导入数组

imports: [FormsModule, ReactiveFormsModule, BrowserModule, RouterModule],

这个模块对JwPaginationModule一无所知

解决方案

最简单的解决方案是简单地将JwPaginationModule 添加到这个数组中

imports: [FormsModule, ReactiveFormsModule, BrowserModule, RouterModule, JwPaginationModule],

现在模块将知道这个组件并正确呈现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-30
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    相关资源
    最近更新 更多