我想创建一个服务,负责打开带有错误和成功通信的bootstrap popovers。我有两个组件ErrorComponent,SuccessComponent和一个名为CommunicatesComponent的服务。我想使用此服务打开像
这样的popoverservice.error('some error')
service.success('success!')
这应该显示popover,提供的文本作为参数。我正在做的是在服务中设置组件属性,如下所示,并在此服务中使用此属性:
ErrorComponent
export class ErrorComponent implements OnInit {
public text:string;
@ViewChild('errorPopover') private errorPopover: NgbPopover;
constructor(private communicatesService:CommunicatesService) {
}
public ngOnInit() {
this.communicatesService.setErrorComponent(this)
}
}
服务:
@Injectable()
export class CommunicatesService {
private errorComponent:ErrorComponent
public setErrorComponent(component:ErrorComponent) {
this.errorComponent = component;
}
public error(text:string) {
console.log(this.errorComponent)
// this.errorComponent.text = text;
}
}
不幸的是,似乎我的组件对象没有很好地提供,因为控制台日志打印未定义。应该如何做?
此致
答案 0 :(得分:1)
我会在设计中改变两件事
service.success('success!')
时,服务会将消息文本发送给订阅者。@ViewChild
。您可以考虑直接将ErrorComponent.text
绑定到弹出窗口(逆转依赖关系)。这些变化可以解决您遇到的问题并使设计更加松散 - 更容易理解和维护。