iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
0
Modern Web

Angular10 實作教學系列 第 16

NG10鐵人賽 - 16 - 資料傳遞處理 - 資料都給我

  • 分享至 

  • xImage
  •  

擬物化介紹

service : 櫃台
資料: 留言
component:人(A 和 B)

A 請人把留言送回 A,B 把留言 放到櫃檯,C 把留言 放到櫃檯

資料流向

註冊並建立具連動性的值 - 多地點直接替換,一定要先註冊

成果

https://i.imgur.com/bvvGNEW.gif

message.model.ts

export class Message {
    constructor(private text: string,
    private error: boolean = false) { }
}

message.service.ts

import { Injectable } from '@angular/core';
import { Message } from '../model/message';

@Injectable({
    providedIn: 'root'
})
export class MessageService {
    // 基本上就是一個 有參數的函式
    private handler: (m: Message) => void;

    get getHandler() {
        return this.handler;
    }

    reportMessage(msg: Message) {
        if (this.handler != null) {
            // 執行取得的 函式並將參數帶進去
            this.handler(msg);
        }
    }

    registerMessageHandler(handler: (m: Message) => void) {
        // 將函式覆蓋掉當前的 handler
        this.handler = handler;
    }
}

message.component.ts

lastMessage: Message;

constructor(private messageService: MessageService) {
    // 註冊 一個函式 m => this.lastMessage = m
    messageService.registerMessageHandler(m => this.lastMessage = m);
    messageService.reportMessage(new Message('盧那', true));
}

// 傳送 值 替代 註冊Key(this.lastMessage) 的 值
setMessage(text: string) {
  this.messageService.reportMessage(new Message(text, true));
}

message.component.html

<h1>資料都給我</h1>
<p>{{lastMessage | json}}</p>
<button type="button" (click)="setMessage('蘋果')">message 資料變成 蘋果</button>
<button type="button" (click)="setMessage('魔法')">message 資料變成 魔法</button>

以上範例改寫自 pro angular 6


上一篇
NG10鐵人賽 - 15 - 資料傳遞處理 - 照順序給值
下一篇
NG10鐵人賽 - 17 - 資料傳遞處理 - 我丟要的接
系列文
Angular10 實作教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言