Javascript 角度5-动态组件加载-放置在ng模板外的组件
我花了几天的时间试图让它发挥作用,但仍然没有,我昨天开了一家,它让我走得更远,但离我想要的还很远 我有一个模态,我想在其中动态加载组件。问题是,Javascript 角度5-动态组件加载-放置在ng模板外的组件,javascript,angular,typescript,angular5,Javascript,Angular,Typescript,Angular5,我花了几天的时间试图让它发挥作用,但仍然没有,我昨天开了一家,它让我走得更远,但离我想要的还很远 我有一个模态,我想在其中动态加载组件。问题是,ng模板没有呈现,因为它位于另一个ng模板中。这个问题得到了解决,现在呈现出来了,但总体上不在正确的位置 如您所见,由于某种原因,它仅在主页上呈现组件和模式,如您所见。应该发生的是,组件在模态中加载。在这里您可以看到HTML: 现在我的代码是: 检查表.组件.ts import { AfterViewInit, Component, Comp
ng模板
没有呈现,因为它位于另一个ng模板
中。这个问题得到了解决,现在呈现出来了,但总体上不在正确的位置
如您所见,由于某种原因,它仅在主页上呈现组件和模式,如您所见。应该发生的是,组件在模态中加载。在这里您可以看到HTML:
现在我的代码是:
检查表.组件.ts
import {
AfterViewInit, Component, ComponentFactoryResolver, Input, OnInit, ViewChild,
ViewEncapsulation
} from '@angular/core';
import {ChecklistDirective} from "./checklist.directive";
import {ChecklistMainComponent} from "./checklist-main/checklist-main.component";
@Component({
selector: 'app-checklist',
templateUrl: './checklist.component.html',
styleUrls: ['./checklist.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class ChecklistComponent implements OnInit {
@ViewChild('modalElement') modalElement;
@ViewChild(ChecklistDirective) appHost: ChecklistDirective;
constructor(private componentFactoryResolver: ComponentFactoryResolver) {
}
ngOnInit() {
this.loadComponent();
}
loadComponent() {
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(ChecklistMainComponent);
const viewContainerRef = this.appHost.viewContainerRef;
viewContainerRef.clear();
const componentRef = viewContainerRef.createComponent(componentFactory);
}
}
import {Directive, ViewContainerRef} from '@angular/core';
@Directive({
selector: '[appHost]'
})
export class ChecklistDirective {
constructor(public viewContainerRef: ViewContainerRef) { }
}
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ChecklistComponent } from './checklist.component';
import {DirectivesModule} from '../../theme/directives/directives.module';
import {TranslateModule} from '@ngx-translate/core';
import {AppCommonPipesModule} from '../../pipes/common.pipes.module';
import {SharedTaskModule} from '../task/shared.task.module';
@NgModule({
imports: [
CommonModule,
DirectivesModule,
SharedTaskModule,
TranslateModule,
AppCommonPipesModule,
],
declarations: [
ChecklistComponent
]
})
export class ChecklistModule { }
import {NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {PerfectScrollbarModule} from 'ngx-perfect-scrollbar';
import { NgxDatatableModule } from '@swimlane/ngx-datatable';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import {FormModule} from '../../components/form/form.module';
import { MultiselectDropdownModule } from 'angular-2-dropdown-multiselect';
import {DirectivesModule} from '../../theme/directives/directives.module';
import { OwlDateTimeModule, OwlNativeDateTimeModule } from 'ng-pick-datetime';
import {NgbModule} from '@ng-bootstrap/ng-bootstrap';
import {SharedModalModule} from '../../components/model/shared.modal.module';
import {AppCommonPipesModule} from '../../pipes/common.pipes.module';
import {SharedDirectiveModule} from '../../directives/shared.directive.module';
import { TranslateModule } from '@ngx-translate/core';
import {ChecklistComponent} from "./checklist.component";
import {ChecklistMainComponent} from "./checklist-main/checklist-main.component";
import {ChecklistViewComponent} from "./checklist-view/checklist-view.component";
import {ChecklistMutateComponent} from "./checklist-mutate/checklist-mutate.component";
import {ChecklistDirective} from "./checklist.directive";
@NgModule({
imports: [
CommonModule,
PerfectScrollbarModule,
NgxDatatableModule,
FormsModule,
FormModule,
ReactiveFormsModule,
MultiselectDropdownModule,
DirectivesModule,
OwlDateTimeModule,
OwlNativeDateTimeModule,
NgbModule,
SharedModalModule,
TranslateModule,
AppCommonPipesModule,
SharedDirectiveModule
],
declarations: [
ChecklistComponent,
ChecklistMainComponent,
ChecklistViewComponent,
ChecklistMutateComponent,
ChecklistDirective
],
exports: [
ChecklistComponent,
ChecklistMainComponent,
ChecklistViewComponent,
ChecklistMutateComponent,
ChecklistDirective
],
entryComponents: [ChecklistMainComponent]
})
export class SharedChecklistModule {
}
import {Component, EventEmitter, Input, OnInit, Output, ViewChild, ViewEncapsulation} from '@angular/core';
import {
CollectionHttpRequestOptions, CollectionHttpResponse,
OrderByRequestOptions
} from '../../../services/http.service';
import {ChecklistModel} from '../../../models/checklist.models';
import {ChecklistService} from '../../../services/checklist.service';
@Component({
selector: 'app-checklist-main',
templateUrl: './checklist-main.component.html',
styleUrls: ['./checklist-main.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class ChecklistMainComponent implements OnInit {
isLoading = false;
tableInfo: any = {offset: 0, limit: 10};
collectionRequestModel = new CollectionHttpRequestOptions();
collectionResponseModel = new CollectionHttpResponse<ChecklistModel>();
@ViewChild('myTable') table: any;
@Input() formData: ChecklistModel = new ChecklistModel();
@Output() activate = new EventEmitter();
constructor(private checklistService: ChecklistService) {}
ngOnInit() {
this.setPage(this.tableInfo);
}
public onSearch(event) {
this.collectionRequestModel.page = 1;
this.collectionRequestModel.search = event.target.value;
this.load();
}
load() {
this.isLoading = true;
this.checklistService.getCollection(this.collectionRequestModel).subscribe(response => {
this.collectionResponseModel = response;
this.isLoading = false;
});
}
onActivate(event) {
this.activate.emit(event);
if (event.type === "click") {
this.loadChecklist(event);
}
}
setPage(pageInfo: any) {
this.collectionRequestModel.page = (pageInfo.offset + 1);
this.collectionRequestModel.itemsPerPage = pageInfo.limit;
this.load();
}
onSort(event: any) {
const sort = event.sorts[0];
const orderBy = new OrderByRequestOptions();
orderBy.key = sort.prop;
orderBy.direction = sort.dir.toUpperCase();
this.collectionRequestModel.orderBy = [orderBy];
this.load();
}
loadChecklist(event) {
console.log("Yay");
}
}
checklist.component.html
<ng-template #modalElement let-c="close" let-d="dismiss">
<div class="modal-header">
<h4 class="modal-title">{{ 'Checklist'| translate }}</h4>
<button type="button" class="close" aria-label="Close" (click)="d('Cross click')">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<ng-template appHost></ng-template>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" (click)="c('Close click')">{{ 'Close'| translate }}</button>
<button type="button" class="btn btn-primary" (click)="onConfirm($event)">{{ 'Confirm'| translate }}</button>
</div>
</ng-template>
<div class="header">
<button class="btn btn-outline-success new-checklist-btn">{{ 'New Checklist'| translate }}</button>
</div>
<div class="body">
<h5>Current Checklists</h5>
<ngx-datatable #myTable class="material" [rows]="collectionResponseModel.items" [columnMode]="'force'"
[headerHeight]="50"
[footerHeight]="50" [rowHeight]="'fixed'" [externalPaging]="true"
[count]="collectionResponseModel.totalCount" [offset]="tableInfo.offset"
[limit]="tableInfo.limit" [loadingIndicator]="isLoading" (activate)="onActivate($event)"
(page)='setPage($event)' (sort)='onSort($event)'>
<ngx-datatable-column name="Naam" prop="name" [flexGrow]="1">
<ng-template let-row="row" let-value="value" ngx-datatable-cell-template>
{{value}}
</ng-template>
</ngx-datatable-column>
</ngx-datatable>
</div>
检查表.module.ts
import {
AfterViewInit, Component, ComponentFactoryResolver, Input, OnInit, ViewChild,
ViewEncapsulation
} from '@angular/core';
import {ChecklistDirective} from "./checklist.directive";
import {ChecklistMainComponent} from "./checklist-main/checklist-main.component";
@Component({
selector: 'app-checklist',
templateUrl: './checklist.component.html',
styleUrls: ['./checklist.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class ChecklistComponent implements OnInit {
@ViewChild('modalElement') modalElement;
@ViewChild(ChecklistDirective) appHost: ChecklistDirective;
constructor(private componentFactoryResolver: ComponentFactoryResolver) {
}
ngOnInit() {
this.loadComponent();
}
loadComponent() {
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(ChecklistMainComponent);
const viewContainerRef = this.appHost.viewContainerRef;
viewContainerRef.clear();
const componentRef = viewContainerRef.createComponent(componentFactory);
}
}
import {Directive, ViewContainerRef} from '@angular/core';
@Directive({
selector: '[appHost]'
})
export class ChecklistDirective {
constructor(public viewContainerRef: ViewContainerRef) { }
}
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ChecklistComponent } from './checklist.component';
import {DirectivesModule} from '../../theme/directives/directives.module';
import {TranslateModule} from '@ngx-translate/core';
import {AppCommonPipesModule} from '../../pipes/common.pipes.module';
import {SharedTaskModule} from '../task/shared.task.module';
@NgModule({
imports: [
CommonModule,
DirectivesModule,
SharedTaskModule,
TranslateModule,
AppCommonPipesModule,
],
declarations: [
ChecklistComponent
]
})
export class ChecklistModule { }
import {NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {PerfectScrollbarModule} from 'ngx-perfect-scrollbar';
import { NgxDatatableModule } from '@swimlane/ngx-datatable';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import {FormModule} from '../../components/form/form.module';
import { MultiselectDropdownModule } from 'angular-2-dropdown-multiselect';
import {DirectivesModule} from '../../theme/directives/directives.module';
import { OwlDateTimeModule, OwlNativeDateTimeModule } from 'ng-pick-datetime';
import {NgbModule} from '@ng-bootstrap/ng-bootstrap';
import {SharedModalModule} from '../../components/model/shared.modal.module';
import {AppCommonPipesModule} from '../../pipes/common.pipes.module';
import {SharedDirectiveModule} from '../../directives/shared.directive.module';
import { TranslateModule } from '@ngx-translate/core';
import {ChecklistComponent} from "./checklist.component";
import {ChecklistMainComponent} from "./checklist-main/checklist-main.component";
import {ChecklistViewComponent} from "./checklist-view/checklist-view.component";
import {ChecklistMutateComponent} from "./checklist-mutate/checklist-mutate.component";
import {ChecklistDirective} from "./checklist.directive";
@NgModule({
imports: [
CommonModule,
PerfectScrollbarModule,
NgxDatatableModule,
FormsModule,
FormModule,
ReactiveFormsModule,
MultiselectDropdownModule,
DirectivesModule,
OwlDateTimeModule,
OwlNativeDateTimeModule,
NgbModule,
SharedModalModule,
TranslateModule,
AppCommonPipesModule,
SharedDirectiveModule
],
declarations: [
ChecklistComponent,
ChecklistMainComponent,
ChecklistViewComponent,
ChecklistMutateComponent,
ChecklistDirective
],
exports: [
ChecklistComponent,
ChecklistMainComponent,
ChecklistViewComponent,
ChecklistMutateComponent,
ChecklistDirective
],
entryComponents: [ChecklistMainComponent]
})
export class SharedChecklistModule {
}
import {Component, EventEmitter, Input, OnInit, Output, ViewChild, ViewEncapsulation} from '@angular/core';
import {
CollectionHttpRequestOptions, CollectionHttpResponse,
OrderByRequestOptions
} from '../../../services/http.service';
import {ChecklistModel} from '../../../models/checklist.models';
import {ChecklistService} from '../../../services/checklist.service';
@Component({
selector: 'app-checklist-main',
templateUrl: './checklist-main.component.html',
styleUrls: ['./checklist-main.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class ChecklistMainComponent implements OnInit {
isLoading = false;
tableInfo: any = {offset: 0, limit: 10};
collectionRequestModel = new CollectionHttpRequestOptions();
collectionResponseModel = new CollectionHttpResponse<ChecklistModel>();
@ViewChild('myTable') table: any;
@Input() formData: ChecklistModel = new ChecklistModel();
@Output() activate = new EventEmitter();
constructor(private checklistService: ChecklistService) {}
ngOnInit() {
this.setPage(this.tableInfo);
}
public onSearch(event) {
this.collectionRequestModel.page = 1;
this.collectionRequestModel.search = event.target.value;
this.load();
}
load() {
this.isLoading = true;
this.checklistService.getCollection(this.collectionRequestModel).subscribe(response => {
this.collectionResponseModel = response;
this.isLoading = false;
});
}
onActivate(event) {
this.activate.emit(event);
if (event.type === "click") {
this.loadChecklist(event);
}
}
setPage(pageInfo: any) {
this.collectionRequestModel.page = (pageInfo.offset + 1);
this.collectionRequestModel.itemsPerPage = pageInfo.limit;
this.load();
}
onSort(event: any) {
const sort = event.sorts[0];
const orderBy = new OrderByRequestOptions();
orderBy.key = sort.prop;
orderBy.direction = sort.dir.toUpperCase();
this.collectionRequestModel.orderBy = [orderBy];
this.load();
}
loadChecklist(event) {
console.log("Yay");
}
}
共享.检查表.模块.ts
import {
AfterViewInit, Component, ComponentFactoryResolver, Input, OnInit, ViewChild,
ViewEncapsulation
} from '@angular/core';
import {ChecklistDirective} from "./checklist.directive";
import {ChecklistMainComponent} from "./checklist-main/checklist-main.component";
@Component({
selector: 'app-checklist',
templateUrl: './checklist.component.html',
styleUrls: ['./checklist.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class ChecklistComponent implements OnInit {
@ViewChild('modalElement') modalElement;
@ViewChild(ChecklistDirective) appHost: ChecklistDirective;
constructor(private componentFactoryResolver: ComponentFactoryResolver) {
}
ngOnInit() {
this.loadComponent();
}
loadComponent() {
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(ChecklistMainComponent);
const viewContainerRef = this.appHost.viewContainerRef;
viewContainerRef.clear();
const componentRef = viewContainerRef.createComponent(componentFactory);
}
}
import {Directive, ViewContainerRef} from '@angular/core';
@Directive({
selector: '[appHost]'
})
export class ChecklistDirective {
constructor(public viewContainerRef: ViewContainerRef) { }
}
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ChecklistComponent } from './checklist.component';
import {DirectivesModule} from '../../theme/directives/directives.module';
import {TranslateModule} from '@ngx-translate/core';
import {AppCommonPipesModule} from '../../pipes/common.pipes.module';
import {SharedTaskModule} from '../task/shared.task.module';
@NgModule({
imports: [
CommonModule,
DirectivesModule,
SharedTaskModule,
TranslateModule,
AppCommonPipesModule,
],
declarations: [
ChecklistComponent
]
})
export class ChecklistModule { }
import {NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {PerfectScrollbarModule} from 'ngx-perfect-scrollbar';
import { NgxDatatableModule } from '@swimlane/ngx-datatable';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import {FormModule} from '../../components/form/form.module';
import { MultiselectDropdownModule } from 'angular-2-dropdown-multiselect';
import {DirectivesModule} from '../../theme/directives/directives.module';
import { OwlDateTimeModule, OwlNativeDateTimeModule } from 'ng-pick-datetime';
import {NgbModule} from '@ng-bootstrap/ng-bootstrap';
import {SharedModalModule} from '../../components/model/shared.modal.module';
import {AppCommonPipesModule} from '../../pipes/common.pipes.module';
import {SharedDirectiveModule} from '../../directives/shared.directive.module';
import { TranslateModule } from '@ngx-translate/core';
import {ChecklistComponent} from "./checklist.component";
import {ChecklistMainComponent} from "./checklist-main/checklist-main.component";
import {ChecklistViewComponent} from "./checklist-view/checklist-view.component";
import {ChecklistMutateComponent} from "./checklist-mutate/checklist-mutate.component";
import {ChecklistDirective} from "./checklist.directive";
@NgModule({
imports: [
CommonModule,
PerfectScrollbarModule,
NgxDatatableModule,
FormsModule,
FormModule,
ReactiveFormsModule,
MultiselectDropdownModule,
DirectivesModule,
OwlDateTimeModule,
OwlNativeDateTimeModule,
NgbModule,
SharedModalModule,
TranslateModule,
AppCommonPipesModule,
SharedDirectiveModule
],
declarations: [
ChecklistComponent,
ChecklistMainComponent,
ChecklistViewComponent,
ChecklistMutateComponent,
ChecklistDirective
],
exports: [
ChecklistComponent,
ChecklistMainComponent,
ChecklistViewComponent,
ChecklistMutateComponent,
ChecklistDirective
],
entryComponents: [ChecklistMainComponent]
})
export class SharedChecklistModule {
}
import {Component, EventEmitter, Input, OnInit, Output, ViewChild, ViewEncapsulation} from '@angular/core';
import {
CollectionHttpRequestOptions, CollectionHttpResponse,
OrderByRequestOptions
} from '../../../services/http.service';
import {ChecklistModel} from '../../../models/checklist.models';
import {ChecklistService} from '../../../services/checklist.service';
@Component({
selector: 'app-checklist-main',
templateUrl: './checklist-main.component.html',
styleUrls: ['./checklist-main.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class ChecklistMainComponent implements OnInit {
isLoading = false;
tableInfo: any = {offset: 0, limit: 10};
collectionRequestModel = new CollectionHttpRequestOptions();
collectionResponseModel = new CollectionHttpResponse<ChecklistModel>();
@ViewChild('myTable') table: any;
@Input() formData: ChecklistModel = new ChecklistModel();
@Output() activate = new EventEmitter();
constructor(private checklistService: ChecklistService) {}
ngOnInit() {
this.setPage(this.tableInfo);
}
public onSearch(event) {
this.collectionRequestModel.page = 1;
this.collectionRequestModel.search = event.target.value;
this.load();
}
load() {
this.isLoading = true;
this.checklistService.getCollection(this.collectionRequestModel).subscribe(response => {
this.collectionResponseModel = response;
this.isLoading = false;
});
}
onActivate(event) {
this.activate.emit(event);
if (event.type === "click") {
this.loadChecklist(event);
}
}
setPage(pageInfo: any) {
this.collectionRequestModel.page = (pageInfo.offset + 1);
this.collectionRequestModel.itemsPerPage = pageInfo.limit;
this.load();
}
onSort(event: any) {
const sort = event.sorts[0];
const orderBy = new OrderByRequestOptions();
orderBy.key = sort.prop;
orderBy.direction = sort.dir.toUpperCase();
this.collectionRequestModel.orderBy = [orderBy];
this.load();
}
loadChecklist(event) {
console.log("Yay");
}
}
检查表主组件.ts
import {
AfterViewInit, Component, ComponentFactoryResolver, Input, OnInit, ViewChild,
ViewEncapsulation
} from '@angular/core';
import {ChecklistDirective} from "./checklist.directive";
import {ChecklistMainComponent} from "./checklist-main/checklist-main.component";
@Component({
selector: 'app-checklist',
templateUrl: './checklist.component.html',
styleUrls: ['./checklist.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class ChecklistComponent implements OnInit {
@ViewChild('modalElement') modalElement;
@ViewChild(ChecklistDirective) appHost: ChecklistDirective;
constructor(private componentFactoryResolver: ComponentFactoryResolver) {
}
ngOnInit() {
this.loadComponent();
}
loadComponent() {
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(ChecklistMainComponent);
const viewContainerRef = this.appHost.viewContainerRef;
viewContainerRef.clear();
const componentRef = viewContainerRef.createComponent(componentFactory);
}
}
import {Directive, ViewContainerRef} from '@angular/core';
@Directive({
selector: '[appHost]'
})
export class ChecklistDirective {
constructor(public viewContainerRef: ViewContainerRef) { }
}
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ChecklistComponent } from './checklist.component';
import {DirectivesModule} from '../../theme/directives/directives.module';
import {TranslateModule} from '@ngx-translate/core';
import {AppCommonPipesModule} from '../../pipes/common.pipes.module';
import {SharedTaskModule} from '../task/shared.task.module';
@NgModule({
imports: [
CommonModule,
DirectivesModule,
SharedTaskModule,
TranslateModule,
AppCommonPipesModule,
],
declarations: [
ChecklistComponent
]
})
export class ChecklistModule { }
import {NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {PerfectScrollbarModule} from 'ngx-perfect-scrollbar';
import { NgxDatatableModule } from '@swimlane/ngx-datatable';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import {FormModule} from '../../components/form/form.module';
import { MultiselectDropdownModule } from 'angular-2-dropdown-multiselect';
import {DirectivesModule} from '../../theme/directives/directives.module';
import { OwlDateTimeModule, OwlNativeDateTimeModule } from 'ng-pick-datetime';
import {NgbModule} from '@ng-bootstrap/ng-bootstrap';
import {SharedModalModule} from '../../components/model/shared.modal.module';
import {AppCommonPipesModule} from '../../pipes/common.pipes.module';
import {SharedDirectiveModule} from '../../directives/shared.directive.module';
import { TranslateModule } from '@ngx-translate/core';
import {ChecklistComponent} from "./checklist.component";
import {ChecklistMainComponent} from "./checklist-main/checklist-main.component";
import {ChecklistViewComponent} from "./checklist-view/checklist-view.component";
import {ChecklistMutateComponent} from "./checklist-mutate/checklist-mutate.component";
import {ChecklistDirective} from "./checklist.directive";
@NgModule({
imports: [
CommonModule,
PerfectScrollbarModule,
NgxDatatableModule,
FormsModule,
FormModule,
ReactiveFormsModule,
MultiselectDropdownModule,
DirectivesModule,
OwlDateTimeModule,
OwlNativeDateTimeModule,
NgbModule,
SharedModalModule,
TranslateModule,
AppCommonPipesModule,
SharedDirectiveModule
],
declarations: [
ChecklistComponent,
ChecklistMainComponent,
ChecklistViewComponent,
ChecklistMutateComponent,
ChecklistDirective
],
exports: [
ChecklistComponent,
ChecklistMainComponent,
ChecklistViewComponent,
ChecklistMutateComponent,
ChecklistDirective
],
entryComponents: [ChecklistMainComponent]
})
export class SharedChecklistModule {
}
import {Component, EventEmitter, Input, OnInit, Output, ViewChild, ViewEncapsulation} from '@angular/core';
import {
CollectionHttpRequestOptions, CollectionHttpResponse,
OrderByRequestOptions
} from '../../../services/http.service';
import {ChecklistModel} from '../../../models/checklist.models';
import {ChecklistService} from '../../../services/checklist.service';
@Component({
selector: 'app-checklist-main',
templateUrl: './checklist-main.component.html',
styleUrls: ['./checklist-main.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class ChecklistMainComponent implements OnInit {
isLoading = false;
tableInfo: any = {offset: 0, limit: 10};
collectionRequestModel = new CollectionHttpRequestOptions();
collectionResponseModel = new CollectionHttpResponse<ChecklistModel>();
@ViewChild('myTable') table: any;
@Input() formData: ChecklistModel = new ChecklistModel();
@Output() activate = new EventEmitter();
constructor(private checklistService: ChecklistService) {}
ngOnInit() {
this.setPage(this.tableInfo);
}
public onSearch(event) {
this.collectionRequestModel.page = 1;
this.collectionRequestModel.search = event.target.value;
this.load();
}
load() {
this.isLoading = true;
this.checklistService.getCollection(this.collectionRequestModel).subscribe(response => {
this.collectionResponseModel = response;
this.isLoading = false;
});
}
onActivate(event) {
this.activate.emit(event);
if (event.type === "click") {
this.loadChecklist(event);
}
}
setPage(pageInfo: any) {
this.collectionRequestModel.page = (pageInfo.offset + 1);
this.collectionRequestModel.itemsPerPage = pageInfo.limit;
this.load();
}
onSort(event: any) {
const sort = event.sorts[0];
const orderBy = new OrderByRequestOptions();
orderBy.key = sort.prop;
orderBy.direction = sort.dir.toUpperCase();
this.collectionRequestModel.orderBy = [orderBy];
this.load();
}
loadChecklist(event) {
console.log("Yay");
}
}
import{Component,EventEmitter,Input,OnInit,Output,ViewChild,viewenclosuration}来自“@angular/core”;
进口{
CollectionHttpRequestOptions,CollectionHttpResponse,
OrderByRequestOptions
}来自“../../../services/http.service”;
从“../../../models/checklist.models”导入{ChecklistModel};
从“../../../services/checklist.service”导入{ChecklistService};
@组成部分({
选择器:'应用程序检查表主',
templateUrl:'./checklist main.component.html',
styleUrls:['./checklist main.component.scss'],
封装:视图封装。无
})
导出类CheckListMain组件实现OnInit{
isLoading=false;
tableInfo:any={offset:0,limit:10};
collectionRequestModel=新的CollectionHttpRequestOptions();
collectionResponseModel=新的CollectionHttpResponse();
@ViewChild(“myTable”)表:任何;
@Input()formData:ChecklistModel=新的ChecklistModel();
@Output()activate=neweventemitter();
构造函数(私有checklistService:checklistService){}
恩戈尼尼特(){
this.setPage(this.tableInfo);
}
公共研究(活动){
this.collectionRequestModel.page=1;
this.collectionRequestModel.search=event.target.value;
这个.load();
}
加载(){
this.isLoading=true;
this.checklistService.getCollection(this.collectionRequestModel).subscribe(response=>{
this.collectionResponseModel=响应;
this.isLoading=false;
});
}
激活(事件){
this.activate.emit(事件);
如果(event.type==“单击”){
本检查表(事件);
}
}
设置页面(页面信息:任何){
this.collectionRequestModel.page=(pageInfo.offset+1);
this.collectionRequestModel.itemsPerPage=pageInfo.limit;
这个.load();
}
onSort(事件:任何){
const sort=event.sorts[0];
const orderBy=new OrderByRequestOptions();
orderBy.key=sort.prop;
orderBy.direction=sort.dir.toUpperCase();
this.collectionRequestModel.orderBy=[orderBy];
这个.load();
}
装载清单(事件){
控制台日志(“Yay”);
}
}
检查表main.component.html
<ng-template #modalElement let-c="close" let-d="dismiss">
<div class="modal-header">
<h4 class="modal-title">{{ 'Checklist'| translate }}</h4>
<button type="button" class="close" aria-label="Close" (click)="d('Cross click')">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<ng-template appHost></ng-template>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" (click)="c('Close click')">{{ 'Close'| translate }}</button>
<button type="button" class="btn btn-primary" (click)="onConfirm($event)">{{ 'Confirm'| translate }}</button>
</div>
</ng-template>
<div class="header">
<button class="btn btn-outline-success new-checklist-btn">{{ 'New Checklist'| translate }}</button>
</div>
<div class="body">
<h5>Current Checklists</h5>
<ngx-datatable #myTable class="material" [rows]="collectionResponseModel.items" [columnMode]="'force'"
[headerHeight]="50"
[footerHeight]="50" [rowHeight]="'fixed'" [externalPaging]="true"
[count]="collectionResponseModel.totalCount" [offset]="tableInfo.offset"
[limit]="tableInfo.limit" [loadingIndicator]="isLoading" (activate)="onActivate($event)"
(page)='setPage($event)' (sort)='onSort($event)'>
<ngx-datatable-column name="Naam" prop="name" [flexGrow]="1">
<ng-template let-row="row" let-value="value" ngx-datatable-cell-template>
{{value}}
</ng-template>
</ngx-datatable-column>
</ngx-datatable>
</div>
{{“新清单”|翻译}
当前清单
{{value}}
您能创建StackBlitz示例吗?不,对不起,我不能。这是一个更大的项目的一部分,很多都是保密的,所以我不能举个例子。你找到解决方案了吗?我也是这样…@Miaow嗯,这不是一个真正的解决方案,但我最终做的是扔掉整个动态加载部分,只在加载页面时加载它。