jhipster angular 2 lazyload権限&国際化全体総括
詳細
まず、Webパッケージの怠け者ロードloaderを変更します.
\webpack\webpack.common.js
修正内容は次のとおりです.
構成しないと、次のようなエラーが発生します.
Uncaught (in promise): Error: Cannot find module '/xxx/xxx.module'
ルーティング・ファイルを作成するには、次の手順に従います.
\src\main\webapp\app\lazy.route.ts
loadChildrenを使用したリロード:
上記の例を示します.
対応するモジュールライフの変化:
src\main\webapp\app\account\account.module.ts
しかし、2つの方法で混同すると、このようなエラーが発生します.
ERROR Error: Uncaught (in promise): Error: No NgModule metadata found for 'undefined'.(…)
これで、怠け者のロードは終わります.
前の版は何かを忘れます
しかし、怠け者のロードに成功し、プログラムページもロードされましたが、データは表示されず、国際化はロードできません.
第一歩は401データアクセス権限エラーを解決する:jwtブロッカーは怠惰にロードされたモジュールをブロックできない
jwtのhttpブロックモジュール:
\src\main\webapp\app\blocks\interceptor
読み取りコード分析により、このモジュールは手動でロードする必要があります.
怠惰なロードを行うモジュール定義ファイルに来ました.
\src\main\webapp\app\admin\admin.module.ts(本例)
これでプログラムが動作し、データがロードされます.
次に、国際化ロードの問題を解決します.
次の問題の原因は多くありません.デフォルトで怠け者ではない場合、彼は自分で国際化サービスを呼び出す必要はありません.追い風車に従えばいいのですが、自分で出てきて何をするにも自分でやらなければなりません.
src\main\webapp\app\admin\audits\audits.component.ts(本例)
国際化の問題についてお話しします.
このような解決はあまりにも些細なようで、各componentに追加しなければなりませんが、モジュール全体がどのcomponentが1回実行されても、2回目の実行は必要ありませんが、各componentに書かなければなりません.
このファイルのすべてのコードは次のとおりです.
ソースは簡単に紹介します
今怠け者のロードの国際化の入り口、私はすべてしていないで、ただ2つの地方をしました:それぞれ監査と設置で、その他のモジュールは自動的に国際化して、しかしあなたは直接他のモジュールに入ってはいけません.OK処女作 TestGate.rar (411.8 KB) ダウンロード回数:1
まず、Webパッケージの怠け者ロードloaderを変更します.
\webpack\webpack.common.js
修正内容は次のとおりです.
module: {
rules: [
{ test: /bootstrap\/dist\/js\/umd\//, loader: 'imports-loader?jQuery=jquery' },
{
test: /\.ts$/,
loaders: [
'angular2-template-loader',
'awesome-typescript-loader',
'angular-router-loader'( )
],
exclude: ['node_modules/generator-jhipster']
},
構成しないと、次のようなエラーが発生します.
Uncaught (in promise): Error: Cannot find module '/xxx/xxx.module'
ルーティング・ファイルを作成するには、次の手順に従います.
\src\main\webapp\app\lazy.route.ts
loadChildrenを使用したリロード:
import { Route } from '@angular/router';
import { NavbarComponent } from './layouts';
export const adminRoute: Route = {
path: 'admin',
loadChildren:'./admin/admin.module' # # , default
};
export const entityRoute: Route = {
path: 'entity',
loadChildren:'./entities/entity.module'
};
export const accountModule: Route = {
path: 'account',
loadChildren:'./account/account.module'
};
export const homeRoute: Route = {
path: 'home',
loadChildren:'./home/home.module'
};
上記の例を示します.
import { Route } from '@angular/router';
import { NavbarComponent } from './layouts';
export const adminRoute: Route = {
path: 'admin',
loadChildren:'./admin/admin.module'
};
export const entityRoute: Route = {
path: 'entity',
loadChildren:'./entities/entity.module'
};
export const accountModule: Route = {
path: 'account',
loadChildren:'./account/account.module#TestGateAccountModule'
};
export const homeRoute: Route = {
path: 'home',
loadChildren:'./home/home.module'
};
対応するモジュールライフの変化:
src\main\webapp\app\account\account.module.ts
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { RouterModule } from '@angular/router';
import { TestGateSharedModule } from '../shared';
import {
Register,
Activate,
Password,
PasswordResetInit,
PasswordResetFinish,
PasswordStrengthBarComponent,
RegisterComponent,
ActivateComponent,
PasswordComponent,
PasswordResetInitComponent,
PasswordResetFinishComponent,
SettingsComponent,
accountState
} from './';
import {customHttpProvider} from "../blocks/interceptor/http.provider";
@NgModule({
imports: [
TestGateSharedModule,
RouterModule.forChild(accountState)
],
declarations: [
ActivateComponent,
RegisterComponent,
PasswordComponent,
PasswordStrengthBarComponent,
PasswordResetInitComponent,
PasswordResetFinishComponent,
SettingsComponent
],
providers: [
Register,
Activate,
Password,
PasswordResetInit,
customHttpProvider(),
PasswordResetFinish
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class TestGateAccountModule {} // default , ‘#’
しかし、2つの方法で混同すると、このようなエラーが発生します.
ERROR Error: Uncaught (in promise): Error: No NgModule metadata found for 'undefined'.(…)
これで、怠け者のロードは終わります.
前の版は何かを忘れます
@NgModule({
imports: [
BrowserModule,
LayoutRoutingModule,
Ng2Webstorage.forRoot({ prefix: 'jhi', separator: '-'}),
RouterModule.forRoot(LAZY_ROUTES, { useHash: true }),
RcdisGateSharedModule,
RcdisGateHomeModule
// ,
// RcdisGateAccountModule
],
:
RouterModule.forChild(LAZY_ROUTES),
しかし、怠け者のロードに成功し、プログラムページもロードされましたが、データは表示されず、国際化はロードできません.
第一歩は401データアクセス権限エラーを解決する:jwtブロッカーは怠惰にロードされたモジュールをブロックできない
jwtのhttpブロックモジュール:
\src\main\webapp\app\blocks\interceptor
読み取りコード分析により、このモジュールは手動でロードする必要があります.
怠惰なロードを行うモジュール定義ファイルに来ました.
\src\main\webapp\app\admin\admin.module.ts(本例)
import {customHttpProvider} from "../blocks/interceptor/http.provider";
providers: [
……
customHttpProvider(),
……
],
これでプログラムが動作し、データがロードされます.
次に、国際化ロードの問題を解決します.
次の問題の原因は多くありません.デフォルトで怠け者ではない場合、彼は自分で国際化サービスを呼び出す必要はありません.追い風車に従えばいいのですが、自分で出てきて何をするにも自分でやらなければなりません.
src\main\webapp\app\admin\audits\audits.component.ts(本例)
constructor(
……
private languageHelper: JhiLanguageHelper,
private languageService: JhiLanguageService,
……
) {
……
this.languageService.setLocations(['all']);
……
}
国際化の問題についてお話しします.
このような解決はあまりにも些細なようで、各componentに追加しなければなりませんが、モジュール全体がどのcomponentが1回実行されても、2回目の実行は必要ありませんが、各componentに書かなければなりません.
このファイルのすべてのコードは次のとおりです.
import { Component, OnInit } from '@angular/core';
import { DatePipe } from '@angular/common';
import {ParseLinks, JhiLanguageService} from 'ng-jhipster';
import { Audit } from './audit.model';
import { AuditsService } from './audits.service';
import { ITEMS_PER_PAGE } from '../../shared';
import { PaginationConfig } from '../../blocks/config/uib-pagination.config';
import {JhiLanguageHelper} from "../../shared/language/language.helper";
@Component({
selector: 'jhi-audit',
templateUrl: './audits.component.html'
})
export class AuditsComponent implements OnInit {
audits: Audit[];
fromDate: string;
itemsPerPage: any;
links: any;
page: number;
orderProp: string;
reverse: boolean;
toDate: string;
totalItems: number;
constructor(
private auditsService: AuditsService,
private parseLinks: ParseLinks,
private paginationConfig: PaginationConfig,
private languageHelper: JhiLanguageHelper,
private languageService: JhiLanguageService,
private datePipe: DatePipe
) {
this.itemsPerPage = ITEMS_PER_PAGE;
this.page = 1;
this.reverse = false;
this.orderProp = 'timestamp';
this.languageService.setLocations(['all']);
this.languageService.addLocation('home');
this.languageService.changeLanguage("zh-cn");
this.languageService.init();
this.languageService.reload();
alert(JSON.stringify(this.languageService.getCurrent()))
}
getAudits() {
return this.sortAudits(this.audits);
}
loadPage(page: number) {
this.page = page;
this.onChangeDate();
}
ngOnInit() {
this.today();
this.previousMonth();
this.onChangeDate();
this.languageHelper.getAll().then((languages) => {
alert(languages);
});
this.languageHelper.updateTitle()
}
onChangeDate() {
this.auditsService.query({page: this.page - 1, size: this.itemsPerPage,
fromDate: this.fromDate, toDate: this.toDate}).subscribe((res) => {
this.audits = res.json();
this.links = this.parseLinks.parse(res.headers.get('link'));
this.totalItems = + res.headers.get('X-Total-Count');
});
}
previousMonth() {
const dateFormat = 'yyyy-MM-dd';
let fromDate: Date = new Date();
if (fromDate.getMonth() === 0) {
fromDate = new Date(fromDate.getFullYear() - 1, 11, fromDate.getDate());
} else {
fromDate = new Date(fromDate.getFullYear(), fromDate.getMonth() - 1, fromDate.getDate());
}
this.fromDate = this.datePipe.transform(fromDate, dateFormat);
}
today() {
const dateFormat = 'yyyy-MM-dd';
// Today + 1 day - needed if the current day must be included
const today: Date = new Date();
today.setDate(today.getDate() + 1);
const date = new Date(today.getFullYear(), today.getMonth(), today.getDate());
this.toDate = this.datePipe.transform(date, dateFormat);
}
private sortAudits(audits: Audit[]) {
audits = audits.slice(0).sort((a, b) => {
if (a[this.orderProp] < b[this.orderProp]) {
return -1;
} else if ([b[this.orderProp] < a[this.orderProp]]) {
return 1;
} else {
return 0;
}
});
return this.reverse ? audits.reverse() : audits;
}
}
ソースは簡単に紹介します
今怠け者のロードの国際化の入り口、私はすべてしていないで、ただ2つの地方をしました:それぞれ監査と設置で、その他のモジュールは自動的に国際化して、しかしあなたは直接他のモジュールに入ってはいけません.OK処女作