在這一篇我們會讓整個系統看起來完整許多:
首先先看到 StocksComponent,其 controller 程式碼如下:
import { Component, Input } from '@angular/core';
import { AccountService } from '../services/account.service';
@Component({
selector: 'app-stocks',
templateUrl: './stocks.component.html',
styleUrls: ['./stocks.component.css']
})
export class StocksComponent {
@Input() stocks: any;
constructor(private accountService: AccountService) {}
buy(stock): void {
this.accountService.purchase(stock);
}
}
StocksComponent 的 Template 如下:
<clr-datagrid>
<clr-dg-column [clrDgField]="'symbol'">Symbol</clr-dg-column>
<clr-dg-column [clrDgField]="'name'">Name</clr-dg-column>
<clr-dg-column [clrDgField]="'price'">Price</clr-dg-column>
<clr-dg-column [clrDgField]="'change'">Change</clr-dg-column>
<clr-dg-column></clr-dg-column>
<clr-dg-row *clrDgItems="let stock of stocks">
<clr-dg-cell>{{stock.symbol}}</clr-dg-cell>
<clr-dg-cell>{{stock.name}}</clr-dg-cell>
<clr-dg-cell>{{stock.price | currency:'USD':'symbol':'.2'}}</clr-dg-cell>
<clr-dg-cell>{{stock.change | currency:'USD':'symbol':'.2'}}</clr-dg-cell>
<clr-dg-cell class="btn-cell"><button class="btn btn-sm" (click)="buy(stock)">Buy</button></clr-dg-cell>
</clr-dg-row>
<clr-dg-footer>
{{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} of {{total}} stocks
<clr-dg-pagination #pagination [clrDgPageSize]="10"></clr-dg-pagination>
</clr-dg-footer>
</clr-datagrid>
有股票一覽表,自然有持有股票的表格,就是 InvestmentComponent
跟 StockComponent 幾乎一樣,差異在:
顯示的是使用者持有的股票
為了要使用 AccountService,要實作其 controller 如下:
import { Component, DoCheck } from '@angular/core';
import { AccountService } from '../services/account.service';
@Component({
selector: 'app-investments',
templateUrl: './investments.component.html',
styleUrls: ['./investments.component.css']
})
export class InvestmentsComponent implements DoCheck {
cost: number = 0;
value: number = 0;
change: number = 0;
stocks: any = [];
length: number = 0;
constructor(private accountService: AccountService) { }
sell(index): void {
this.accountService.sell(index);
}
ngDoCheck() {
if (this.accountService.stocks.length !== this.stocks.length) {
this.stocks = this.accountService.stocks;
}
if (this.cost !== this.accountService.cost || this.value !== this.
accountService.value) {
this.cost = this.accountService.cost;
this.value = this.accountService.value;
this.change = this.accountService.value - this.accountService.cost;
}
}
}
在完成上面的兩個 Component 後,我們就可以看到全貌了
小結: