iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 13
0
自我挑戰組

Angular 學習雜記系列 第 13

Angular 學習雜記-Angular整合應用網站-員工資料管理系統(二)

  • 分享至 

  • xImage
  •  

接下面,就要建立第二個元件,來顯示出員工資料的明細。這也是子元件。之前有提到元件可大可小,大時就是一個網頁,小時就可以是一個子元件,專門來執行特定的功能,再組合起來,成為一個網頁。

先依之前的步驟,建立第二個元件,名稱為「employee-detail」,來顯示員工資料。目前專案的目錄、檔案列表如下圖所示:

https://ithelp.ithome.com.tw/upload/images/20190929/200009537fAl3XIxM8.png

在employee-detail.ts中,首先,將import資料類別。再增加一個可以輸入的參數employee。程式碼如下:

import { Component, OnInit, Input } from '@angular/core';
// 引用資料類
import { Employeeinfo } from './../employeeinfo';

@Component({
  selector: 'app-employee-detail',
  templateUrl: './employee-detail.component.html',
  styleUrls: ['./employee-detail.component.css']
})
export class EmployeeDetailComponent implements OnInit {
  @Input() employee: Employeeinfo;

  constructor() { }

  ngOnInit() {
  }

}

注意,在import Angular的core時,增加Input的類別,才能用輸入參數。

在employee-detail.component.html中,在div判斷employee變數是否有值,如果有值,才顯示出員工的資料。程式碼如下:

<div *ngIf="employee">

  <h2>{{employee.name}} 員工明細</h2>
  <div><span>編號: </span>{{employee.id}}</div>
  <div><span>員工編號: </span>{{employee.serialnumber}}</div>
  <div>
    <label>姓名:
      <input [(ngModel)]="employee.name" placeholder="name"/>
    </label>
  </div>
  <div>
    <label>地址:
      <input [(ngModel)]="employee.address" placeholder="address"/>
    </label>
  </div>
  <div><span>銷售額: </span>{{employee.sales}}</div>
</div>

做好了子元件,要修改主元件employee-list.component的.ts、.html程式,來顯示出子元件。

在employee-list.component.ts,宣告selectedemployee變數為Employeeinfo物件。增加一個函式,觸發click事件,將選取的Employeeinfo物件,指定為selectedemployee。再將此變數傳遞到子元件。程式碼如下:

import { Component, OnInit } from '@angular/core';

// 引用資料類
import { Employeeinfo } from './../employeeinfo';
// 載入Service
import { EmployeeserviceService } from './../employeeservice.service';

@Component({
  selector: 'app-employee-list',
  templateUrl: './employee-list.component.html',
  styleUrls: ['./employee-list.component.css']
})
export class EmployeeListComponent implements OnInit {

  employeelists: Employeeinfo[];

  // 宣告selectedemployee變數為Employeeinfo物件
  selectedemployee: Employeeinfo;

  // 建構子
  constructor(private employeeService: EmployeeserviceService) {}

  // 初始化
  ngOnInit() {
    this.getEmployees();
  }

  getEmployees(): void {
    this.employeelists = this.employeeService.getEmployee();
  }

  // 觸發click事件,將選取的Employeeinfo物件,指定為selectedemployee。
  // 再將此變數傳遞到子元件。
  onSelect(employee: Employeeinfo): void {
    this.selectedemployee = employee;
  }
}

在employee-list.component.html,在li增加(click)事件,將Employeeinfo物件傳入selectedemployee變數。在html的最後,將子元件的區塊加入,並且輸入參數selectedemployee傳遞到子元件中。程式碼如下:

<h2>員工列表</h2>
<ul class="employees">
  <li *ngFor="let employeeinfo of employeelists"
    [class.selected]="employeeinfo == selectedemployee"
    (click)="onSelect(employeeinfo)">
    <span class="badge">{{employeeinfo.id}}</span> {{employeeinfo.name}}
  </li>
</ul>

<app-employee-detail [employee]="selectedemployee" ></app-employee-detail>

網頁執行結果,按任何一個員工列表中的員工,就會在下方顯示出明細資料 :
https://ithelp.ithome.com.tw/upload/images/20190929/20000953XDCUBSOrJg.png


上一篇
Angular 學習雜記-Angular整合應用網站-員工資料管理系統(一)
下一篇
Angular 學習雜記-Angular整合應用網站-員工資料管理系統(三)
系列文
Angular 學習雜記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
darta0809
iT邦新手 5 級 ‧ 2020-12-29 13:47:31

你好,這邊似乎要把employeelist.ts的salse補上
{ id: 1, serialnumber: 'W01', name: '張三', address: '台北市內湖區', sales: 30000},
在前面教學好像沒提到

我要留言

立即登入留言