服务具有空对象“消息” . 我通过“add()”方法分配其属性值 . 日志显示已分配值 . 但是当我想直接从组件或通过getter获取它时,属性仍未定义,这由getter中的log()方法确认 .
我是Angular的新人,也是TS的新人,所以我想我没有看到一个明显的错误 . 预先感谢您的任何帮助 .
消息对象:
export class Message {
messageText: string;
messageStatus: MessageStatus;
}
MessageStatus枚举:
export enum MessageStatus {
INFO,
SUCCESS,
ERROR,
WARN
}
服务:
import {Injectable} from '@angular/core';
import {Message} from '../../model/message';
import {log} from 'util';
@Injectable({
providedIn: 'root'
})
export class MessageService {
private message: Message = new Message();
constructor() { }
public add(message: Message): void {
this.message = message
log('MESSAGE in add: ' + this.message.messageText +', STATUS in add: ' + this.message.messageStatus);
}
public getMessage(): Message {
log('MESSAGE in get: ' + this.message.messageText +', STATUS in get: ' + this.message.messageStatus);
return this.message;
}
public clear(): void {
this.message = new Message();
}
}
零件:
import { Component, OnInit } from '@angular/core';
import {MessageService} from '../../service/messages/message.service';
import {MessageStatus} from '../../service/messages/messageStatus';
@Component({
selector: 'app-messages',
template: `
<div class="message-position" *ngIf="messageService.getMessage().messageText">
<div [ngClass]="{
'alert alert-info': messageService.getMessage().messageStatus === MessageStatus.INFO,
'alert alert-success': messageService.getMessage().messageStatus === MessageStatus.SUCCESS,
'alert alert-danger': messageService.getMessage().messageStatus === MessageStatus.ERROR,
'alert alert-warning': messageService.getMessage().messageStatus === MessageStatus.WARN
}">
{{messageService.getMessage().messageText}}
<button class="btn btn-primary" (click)="messageService.clear()">Ok</button>
</div>
</div>`,
styleUrls: ['./messages.component.scss']
})
export class MessagesComponent{
constructor(public messageService: MessageService) { }
}
add()中的log()输出显示对象属性接收的值:
11月25日19:05:22 - 添加消息:未找到客户,状态另外:3
getMessage()中的log()输出,对象属性仍然是未定义的:
11月25日19:05:22 - 获取中的消息:未定义,状态为get:undefined
UPDATE:
调用add()的方法 . 放在不同的 class :
private messageService: MessageService = new MessageService();
private message: Message = new Message();
logResponce(messageText: string, messageStatus: MessageStatus): void {
this.message.messageText = messageText;
this.message.messageStatus = messageStatus;
this.messageService.add(this.message);
}
1 回答
这将创建一个新的服务实例 . 你不希望这样 . 您希望使用由Angular创建并注入组件的 the 单例实例 .