Angular 4人材募集管理機能(1)2018-07-18
15458 ワード
学習資料はhttps://angular.cn/tutorialangularチュートリアル「ヒーローガイド」によると
一、完了1、人材リストの取得と表示2、選択した人材詳細の編集3、異なる人材データ間のナビゲーションの完了
二、機能1を完成し、内蔵命令で要素を表示または非表示にし、人材データリスト2を表示し、angularコンポーネントを作成して人材の詳細を表示し、人材の配列3を表示し、読み取り専用データのために単一のデータバインド4を使用し、編集可能なフィールドを追加し、双方向データバインドを使用して更新モデル5にバインドし、追加方法を使用してユーザーイベントにバインドする6、ユーザーは、メイン・リストで人材を選択し、詳細ビューで7を編集したり、パイプを使用してデータ8をフォーマットしたり、共有サービスを作成して人材9を管理したり、異なるビューとそのコンポーネント間のルーティングを使用したりすることができます.
第1ステップ1、ng new myApp angular cliを使用して初期のアプリケーション構造を作成する2、angularコンポーネントを使用してデータを表示する3、{{title}}二重カッコ補間式を使用してデータを表示する
ステップ2:(ng g class talent追加talent.ts)1、ng g component components/talentまたはng generate component talents CLIを使用して2番目のコンポーネントを作成し、人材リストのビュー2を表示し、talentsで作成したコンポーネントをシェルコンポーネントAppComponentに追加して、それを表示する3、UppercasePipeを使用して人材の名前をフォーマットする4、ngModel命令による双方向データバインド
ステップ3:1、人材ガイドアプリケーションは1つのマスタービューに英雄リスト2を表示し、ユーザーは1人の人材を選択し、その英雄の人材3を表示し、ngForを使用して1つのリスト4を表示し、ngIfを使用して条件に基づいて5を含むか除外し、classバインドを使用してcssのスタイルクラスを切り替える
ステップ4:1、独立した多重化可能なtalentDetailComponent人材詳細コンポーネントを作成する2、属性バインディング構文で親コンポーネントtalentsComponentがサブコンポーネントTalentsDetailComponent 3を制御できるようにする@Inputデザイナでtalent人材属性を外部のtalentsComponentでバインディングできるようにする
ステップ5:1、データアクセスロジックをTalentServiceクラスに再構築する2、ルートインジェクタでTalentServiceをサービスを変更する仕入先に登録し、他のコンポーネントに注入できるようにする3、angular依存注入メカニズムを使用してコンポーネントに登録する4、TalentServiceでデータを取得する方法に非同期の関数署名を提供する5、Observableの発見、RxJsライブラリ6、RxJSのof()メソッドを使用して、シミュレーションされた人財データのオブザーバオブジェクトObservable 7を返し、コンポーネントngOnInitライフサイクルフックでTalentServiceメソッド8を呼び出し、クラス間で緩やかな結合通信を実現するためにMessageServiceを作成しました.
ステップ6:機能:1、1つのダッシュボードビューを追加する2、人材リストとダッシュボードビューの間をナビゲートする3、どのビューで1人の人材をクリックしても、その人材の詳細ページにナビゲートする4、メールの中で1つの深いリンクをクリックすると、直接1人の特定の人材の詳細ビューを開くAngularルータを追加してそれぞれの異なるコンポーネントの間で2をナビゲートして、あなたはいくつかのリンクとAppComponentをナビゲーション用のシェルコンポーネント3に変換し、AppRoutingModuleにルータ4を構成し、いくつかの単純なルーティングを定義し、1つのリダイレクトルーティングと1つのパラメトリックルーティング5を定義し、 要素にはrouterLink命令6が用いられ、1つの緊密に結合されたマスタをビューからルーティング付き詳細ビュー7に再構成し、ルーティングリンクパラメータを用いて選択された人材の詳細ビュー8にナビゲートし、複数のコンポーネント間でTalentServiceサービスを共有するを使って
ステップ7:機能:1、AngularのHttpClientを利用していくつかのデータ持続化特性を追加する2、TalentServiceはHTTPを通じて人材データを取得する3、ユーザーは人材を追加、編集、削除することができ、HTTPを通じてこれらの変更を保存する4、ユーザーは名前によって人材を検索することができるアプリケーションでHTTPを使用するための必須依存を追加した2、TalentServiceを再構築してweb APIで人材データをロードした3、TalentServiceを拡張してpost()、put()およびdelete()メソッドをサポートした4、コンポーネントを変更して、ユーザーが英雄を追加、編集および削除できるようにした5、メモリWeb API 6を構成し、「観察可能オブジェクト」の使用方法を習得した
採用管理の開始
一、人材募集管理1、プロジェクトの作成
2、angular-in-memory-web-apiの追加作成が完了したら、package.jsonファイルでdependenciesを見つけて追加する
追加後cnpm install
3、二重括弧補間式を用いてデータapp.component.tsを表示する
app.component.html自動作成テンプレートをクリア
src/styles.css共通スタイルの追加
二、人財リストの作成1、人財リストの新規コンポーネントの作成
app/components/talents/talents.component.ts「Mr.1」というヒーローを表すtalentプロパティを追加
talents.component.htmlカッコ補間式を使用してデータを表示
app-talentsシェルコンポーネントAppComponent src/app/app.component.htmlに追加
2、人材は一人だけではなく、talentを作成し、idとname属性を追加する
src/app/talent.ts idとname属性を追加します.コードは次のとおりです.
3、talents.component.ts人材リストクラスへ、talentをインポートし、talent='Mr.1'src/app/components/talents/talents.component.ts修正後のコードを再構築する
4、人財ビューテンプレートtalents.component.htmlを修正する
UppercasePipeを使用してフォーマットすることもできます
5、人材名を編集し、双方向データバインディングを使用してこのデータフローを自動化するには、フォーム要素とコンポーネントのtalent.name属性の間に双方向データバインディングを確立する必要があります.まず、app.module.tsをFormsModule app.module.tsにインポートします.
人財リストsrc/app/components/talents/talents.component.htmlの変更
三、人材リスト1を表示し、mockで模擬人材データを作成する
人材talentをインポートし、シミュレーションデータmock-talents.tsコードを変更し、コードを次のように変更します.
2、人財リストTalentsComponentクラスファイルにアナログ人財データを表示し、アナログデータTALENTS src/app/components/talents/talents.component.tsをインポートする
シミュレーションデータsrc/app/components/talents/talents.component.htmlをビューに表示
シミュレーションデータにスタイルsrc/app/components/talents/talents.component.cssを追加
3、アナログデータバインドイベントに各人材にバインドイベント(click)=「onSelect(talent)」src/app/components/talents/talents.component.htmlを追加する
クリックイベントメソッドsrc/app/components/talents/talents.component.tsを追加
4、詳細テンプレートを修正する*ngIf=「selectedTalent」を追加します.まだ人材が選択されていないためですが、バインド式はselectedTalent属性src/app/components/talents/talents.component.htmlを参照しています.
5、選択した人材にスタイルsrc/app/components/talents/talents.component.htmlを追加する
四、親子コンポーネント1、人財リストの分離と選択した人財詳細、新しい人財詳細コンポーネントの作成
人材リストtalents.component.htmlのリストの詳細をsrc/app/components/talent-detail/talent-detail.component.htmlにコピー
さらにselectedTalentを@Input()talent:Talent;(talent)に変更し、修正コードは以下の通りです.
2、サブコンポーネントは親コンポーネントを受け入れ、人材Talentを導入し、@Inputデザイナsrc/app/components/talent-detail/talent-detail.component.tsを追加する
3、親コンポーネント使用サブコンポーネントapp-talent-detail
五、Angularにおけるサービス1、データにアクセスするためのサービスの作成
angularでは矢印関数が多く使われていますので、矢印関数を参照してくださいhttps://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_functions
2、リモートサービスデータ要求に使用できないデータの同期取得TalentとTALENTS src/app/services/talent.service.tsのインポート
人財リストの変更、インポートシミュレーションデータの削除、TalentService src/app/components/talents/talents.component.tsのインポート
3、非同期でデータを取得し、ObservableでTalentとTALENTS src/app/services/talent.service.tsをインポートする
4、表示メッセージ作成表示メッセージ
一、完了1、人材リストの取得と表示2、選択した人材詳細の編集3、異なる人材データ間のナビゲーションの完了
二、機能1を完成し、内蔵命令で要素を表示または非表示にし、人材データリスト2を表示し、angularコンポーネントを作成して人材の詳細を表示し、人材の配列3を表示し、読み取り専用データのために単一のデータバインド4を使用し、編集可能なフィールドを追加し、双方向データバインドを使用して更新モデル5にバインドし、追加方法を使用してユーザーイベントにバインドする6、ユーザーは、メイン・リストで人材を選択し、詳細ビューで7を編集したり、パイプを使用してデータ8をフォーマットしたり、共有サービスを作成して人材9を管理したり、異なるビューとそのコンポーネント間のルーティングを使用したりすることができます.
第1ステップ1、ng new myApp angular cliを使用して初期のアプリケーション構造を作成する2、angularコンポーネントを使用してデータを表示する3、{{title}}二重カッコ補間式を使用してデータを表示する
ステップ2:(ng g class talent追加talent.ts)1、ng g component components/talentまたはng generate component talents CLIを使用して2番目のコンポーネントを作成し、人材リストのビュー2を表示し、talentsで作成したコンポーネントをシェルコンポーネントAppComponentに追加して、それを表示する3、UppercasePipeを使用して人材の名前をフォーマットする4、ngModel命令による双方向データバインド
ステップ3:1、人材ガイドアプリケーションは1つのマスタービューに英雄リスト2を表示し、ユーザーは1人の人材を選択し、その英雄の人材3を表示し、ngForを使用して1つのリスト4を表示し、ngIfを使用して条件に基づいて5を含むか除外し、classバインドを使用してcssのスタイルクラスを切り替える
ステップ4:1、独立した多重化可能なtalentDetailComponent人材詳細コンポーネントを作成する2、属性バインディング構文で親コンポーネントtalentsComponentがサブコンポーネントTalentsDetailComponent 3を制御できるようにする@Inputデザイナでtalent人材属性を外部のtalentsComponentでバインディングできるようにする
ステップ5:1、データアクセスロジックをTalentServiceクラスに再構築する2、ルートインジェクタでTalentServiceをサービスを変更する仕入先に登録し、他のコンポーネントに注入できるようにする3、angular依存注入メカニズムを使用してコンポーネントに登録する4、TalentServiceでデータを取得する方法に非同期の関数署名を提供する5、Observableの発見、RxJsライブラリ6、RxJSのof()メソッドを使用して、シミュレーションされた人財データのオブザーバオブジェクトObservable 7を返し、コンポーネントngOnInitライフサイクルフックでTalentServiceメソッド8を呼び出し、クラス間で緩やかな結合通信を実現するためにMessageServiceを作成しました.
ステップ6:機能:1、1つのダッシュボードビューを追加する2、人材リストとダッシュボードビューの間をナビゲートする3、どのビューで1人の人材をクリックしても、その人材の詳細ページにナビゲートする4、メールの中で1つの深いリンクをクリックすると、直接1人の特定の人材の詳細ビューを開くAngularルータを追加してそれぞれの異なるコンポーネントの間で2をナビゲートして、あなたはいくつかのリンクとAppComponentをナビゲーション用のシェルコンポーネント3に変換し、AppRoutingModuleにルータ4を構成し、いくつかの単純なルーティングを定義し、1つのリダイレクトルーティングと1つのパラメトリックルーティング5を定義し、 要素にはrouterLink命令6が用いられ、1つの緊密に結合されたマスタをビューからルーティング付き詳細ビュー7に再構成し、ルーティングリンクパラメータを用いて選択された人材の詳細ビュー8にナビゲートし、複数のコンポーネント間でTalentServiceサービスを共有するを使って
ステップ7:機能:1、AngularのHttpClientを利用していくつかのデータ持続化特性を追加する2、TalentServiceはHTTPを通じて人材データを取得する3、ユーザーは人材を追加、編集、削除することができ、HTTPを通じてこれらの変更を保存する4、ユーザーは名前によって人材を検索することができるアプリケーションでHTTPを使用するための必須依存を追加した2、TalentServiceを再構築してweb APIで人材データをロードした3、TalentServiceを拡張してpost()、put()およびdelete()メソッドをサポートした4、コンポーネントを変更して、ユーザーが英雄を追加、編集および削除できるようにした5、メモリWeb API 6を構成し、「観察可能オブジェクト」の使用方法を習得した
採用管理の開始
一、人材募集管理1、プロジェクトの作成
ng new ngTalents
2、angular-in-memory-web-apiの追加作成が完了したら、package.jsonファイルでdependenciesを見つけて追加する
"@angular/upgrade": "^6.0.0-rc.5",
"angular-in-memory-web-api": "^0.6.0",
追加後cnpm install
3、二重括弧補間式を用いてデータapp.component.tsを表示する
title = ' ';
app.component.html自動作成テンプレートをクリア
{{title}}
src/styles.css共通スタイルの追加
h1 {
color: #369;
font-family: Arial, Helvetica, sans-serif;
font-size: 250%;
}
h2, h3 {
color: #444;
font-family: Arial, Helvetica, sans-serif;
font-weight: lighter;
}
body {
margin: 2em;
}
body, input[text], button {
color: #888;
font-family: Cambria, Georgia;
}
* {
font-family: Arial, Helvetica, sans-serif;
}
二、人財リストの作成1、人財リストの新規コンポーネントの作成
ng g component components/talents
app/components/talents/talents.component.ts「Mr.1」というヒーローを表すtalentプロパティを追加
talent='Mr.1'
talents.component.htmlカッコ補間式を使用してデータを表示
{{talent}}
app-talentsシェルコンポーネントAppComponent src/app/app.component.htmlに追加
{{title}}
2、人材は一人だけではなく、talentを作成し、idとname属性を追加する
ng g class talent
src/app/talent.ts idとname属性を追加します.コードは次のとおりです.
export class Talent {
id:number;
name:string;
}
3、talents.component.ts人材リストクラスへ、talentをインポートし、talent='Mr.1'src/app/components/talents/talents.component.ts修正後のコードを再構築する
import { Component, OnInit } from '@angular/core';
import { Talent } from '../../talent';
@Component({
selector: 'app-talents',
templateUrl: './talents.component.html',
styleUrls: ['./talents.component.css']
})
export class TalentsComponent implements OnInit {
// talent='Mr.1'
talent:Talent={
id: 1,
name: 'Mr.1'
};
constructor() { }
ngOnInit() {
}
}
4、人財ビューテンプレートtalents.component.htmlを修正する
:{{talent.name}}
id :{{talent.id}}
UppercasePipeを使用してフォーマットすることもできます
UppercasePipe :{{ talent.name | uppercase }}
5、人材名を編集し、双方向データバインディングを使用してこのデータフローを自動化するには、フォーム要素とコンポーネントのtalent.name属性の間に双方向データバインディングを確立する必要があります.まず、app.module.tsをFormsModule app.module.tsにインポートします.
import { FormsModule } from '@angular/forms';
imports: [
BrowserModule,
FormsModule
],
人財リストsrc/app/components/talents/talents.component.htmlの変更
三、人材リスト1を表示し、mockで模擬人材データを作成する
ng g class mock-talents
人材talentをインポートし、シミュレーションデータmock-talents.tsコードを変更し、コードを次のように変更します.
import { Talent } from './talent';
export const TALENT:Talent[]=[
{ id: 1, name: 'Mr. 1' },
{ id: 2, name: 'Mr. 2' },
{ id: 3, name: 'Mr. 3' },
{ id: 4, name: 'Mr. 4' },
{ id: 5, name: 'Mr. 5' },
{ id: 6, name: 'Mr. 6' },
{ id: 7, name: 'Mr. 7' },
{ id: 8, name: 'Mr. 8' },
{ id: 9, name: 'Mr. 9' },
{ id: 10, name: 'Mr. 10' }
];
2、人財リストTalentsComponentクラスファイルにアナログ人財データを表示し、アナログデータTALENTS src/app/components/talents/talents.component.tsをインポートする
import { Component, OnInit } from '@angular/core';
import { Talent } from '../../talent';
import { TALENTS } from '../../mock-talents';//
@Component({
selector: 'app-talents',
templateUrl: './talents.component.html',
styleUrls: ['./talents.component.css']
})
export class TalentsComponent implements OnInit {
// talent='Mr.1'
talent:Talent={
id: 1,
name: 'Mr.1'
};
talents=TALENTS;// talents , ,
constructor() { }
ngOnInit() {
}
}
シミュレーションデータsrc/app/components/talents/talents.component.htmlをビューに表示
- id {{talent.id}} {{talent.name}}
シミュレーションデータにスタイルsrc/app/components/talents/talents.component.cssを追加
.selected {
background-color: #CFD8DC !important;
color: white;
}
.talents {
margin: 0 0 2em 0;
list-style-type: none;
padding: 0;
width: 15em;
}
.talents li {
cursor: pointer;
position: relative;
left: 0;
background-color: #EEE;
margin: .5em;
padding: .3em 0;
height: 1.6em;
border-radius: 4px;
}
.talents li.selected:hover {
background-color: #BBD8DC !important;
color: white;
}
.talents li:hover {
color: #607D8B;
background-color: #DDD;
left: .1em;
}
.talents .text {
position: relative;
top: -3px;
}
.talents .badge {
display: inline-block;
font-size: small;
color: white;
padding: 0.8em 0.7em 0 0.7em;
background-color: #607D8B;
line-height: 1em;
position: relative;
left: -1px;
top: -4px;
height: 1.8em;
margin-right: .8em;
border-radius: 4px 0 0 4px;
}
3、アナログデータバインドイベントに各人材にバインドイベント(click)=「onSelect(talent)」src/app/components/talents/talents.component.htmlを追加する
- id {{talent.id}} {{talent.name}}
クリックイベントメソッドsrc/app/components/talents/talents.component.tsを追加
selectedTalent:Talent;
//
onSelect(talent:Talent):void{
this.selectedTalent=talent;// selectedTalent
}
import { Component, OnInit } from '@angular/core';
import { Talent } from '../../talent';
import { TALENTS } from '../../mock-talents';//
@Component({
selector: 'app-talents',
templateUrl: './talents.component.html',
styleUrls: ['./talents.component.css']
})
export class TalentsComponent implements OnInit {
// talent='Mr.1'
talent:Talent={
id: 1,
name: 'Mr.1'
};
talents=TALENTS;// talents , ,
selectedTalent:Talent;// Talent selectedTalent,
constructor() { }
ngOnInit() {
}
//
onSelect(talent:Talent):void{
this.selectedTalent=talent;// selectedTalent
}
}
4、詳細テンプレートを修正する*ngIf=「selectedTalent」を追加します.まだ人材が選択されていないためですが、バインド式はselectedTalent属性src/app/components/talents/talents.component.htmlを参照しています.
- id {{talent.id}} {{talent.name}}
id :{{selectedTalent.id}}
{{ selectedTalent.name | uppercase }}
5、選択した人材にスタイルsrc/app/components/talents/talents.component.htmlを追加する
-
四、親子コンポーネント1、人財リストの分離と選択した人財詳細、新しい人財詳細コンポーネントの作成
ng g component components/talent-detail
人材リストtalents.component.htmlのリストの詳細をsrc/app/components/talent-detail/talent-detail.component.htmlにコピー
id :{{selectedTalent.id}}
{{ selectedTalent.name | uppercase }}
さらにselectedTalentを@Input()talent:Talent;(talent)に変更し、修正コードは以下の通りです.
id :{{talent.id}}
{{ talent.name | uppercase }}
2、サブコンポーネントは親コンポーネントを受け入れ、人材Talentを導入し、@Inputデザイナsrc/app/components/talent-detail/talent-detail.component.tsを追加する
import { Component, OnInit,Input} from '@angular/core';
import { Talent } from '../../talent';
@Component({
selector: 'app-talent-detail',
templateUrl: './talent-detail.component.html',
styleUrls: ['./talent-detail.component.css']
})
export class TalentDetailComponent implements OnInit {
@Input() talent:Talent;//
constructor() {}
ngOnInit() {
}
}
3、親コンポーネント使用サブコンポーネントapp-talent-detail
五、Angularにおけるサービス1、データにアクセスするためのサービスの作成
ng g service services/talent
angularでは矢印関数が多く使われていますので、矢印関数を参照してくださいhttps://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_functions
2、リモートサービスデータ要求に使用できないデータの同期取得TalentとTALENTS src/app/services/talent.service.tsのインポート
import { Injectable } from '@angular/core';
import { Talent } from '../talent';
import { TALENTS } from '../mock-talents';//
// ,
// Angular HttpClient RxJS Observable
// Observable
import { Observable, of } from 'rxjs';
//@Injectable()
@Injectable({
//
// providedIn 'root'
providedIn: 'root'
})
export class TalentService {
constructor() { }
//
getTalents(): Talent[]{//
return TALENTS;
}
}
人財リストの変更、インポートシミュレーションデータの削除、TalentService src/app/components/talents/talents.component.tsのインポート
import { Component, OnInit } from '@angular/core';
import { Talent } from '../../talent';
// import { TALENTS } from '../../mock-talents';//
//
import { TalentService } from '../../services/talent.service';
@Component({
selector: 'app-talents',
templateUrl: './talents.component.html',
styleUrls: ['./talents.component.css']
})
export class TalentsComponent implements OnInit {
// talents=TALENTS;// talents , ,
selectedTalent:Talent;// Talent selectedTalent,
talents:Talent[];
constructor(private talentService:TalentService) { }
ngOnInit() {
this.getTalents();// ngOnInit getHeroes()
}
//
onSelect(talent:Talent):void{
this.selectedTalent=talent;// selectedTalent
}
getTalents():void{
// this.talentService.getTalents().subscribe(talents=>this.talents=talents);
//talentService.getTalents();
// ,
//talentService.getTalents()
// , Promise( ), Observable( )
// HttpClient.get() , HttpClient.get() Observable
//Observable RXJS
// Angular HttpClient RxJS Observable of
//
this.talents=this.talentService.getTalents();//getTalents TALENTS
}
}
3、非同期でデータを取得し、ObservableでTalentとTALENTS src/app/services/talent.service.tsをインポートする
import { Component, OnInit } from '@angular/core';
import { Talent } from '../../talent';
// import { TALENTS } from '../../mock-talents';//
//
import { TalentService } from '../../services/talent.service';
@Component({
selector: 'app-talents',
templateUrl: './talents.component.html',
styleUrls: ['./talents.component.css']
})
export class TalentsComponent implements OnInit {
// talents=TALENTS;// talents , ,
selectedTalent:Talent;// Talent selectedTalent,
talents:Talent[];
constructor(private talentService:TalentService) { }
ngOnInit() {
this.getTalents();// ngOnInit getHeroes()
}
//
onSelect(talent:Talent):void{
this.selectedTalent=talent;// selectedTalent
}
getTalents():void{
// this.talentService.getTalents().subscribe(talents=>this.talents=talents);
//talentService.getTalents();
// ,
//talentService.getTalents()
// , Promise( ), Observable( )
// HttpClient.get() , HttpClient.get() Observable
//Observable RXJS
// Angular HttpClient RxJS Observable of
//
// this.talents=this.talentService.getTalents();//getTalents TALENTS
// Observable
//subscribe
this.talentService.getTalents().subscribe(talents=>this.talents=talents);
//Observable.subscribe()
}
}
4、表示メッセージ作成表示メッセージ
ng g component messages