Angular 以角度显示来自util服务的弹出窗口

Angular 以角度显示来自util服务的弹出窗口,angular,service,popup,Angular,Service,Popup,我有一个自定义组件popup.component.ts,并在每个视图的标记中使用它。它位于底部,看不见。当我想弹出消息时,我只需将绑定字段切换为this.poppyVisible=true,它就会显示出来 我意识到我从来没有单独的弹出窗口,所以在我现有的util.service.ts文件中添加一个为我弹出的方法是有意义的。但我不确定我是否能做到这一点,如果是的话,我是否必须将引用传递给视图子对象或其他对象 在谷歌上搜索这个问题会导致很多实质性的东西显示出这种方法,但这并没有真正启发我对这个问题的

我有一个自定义组件popup.component.ts,并在每个视图的标记中使用它。它位于底部,看不见。当我想弹出消息时,我只需将绑定字段切换为this.poppyVisible=true,它就会显示出来

我意识到我从来没有单独的弹出窗口,所以在我现有的util.service.ts文件中添加一个为我弹出的方法是有意义的。但我不确定我是否能做到这一点,如果是的话,我是否必须将引用传递给视图子对象或其他对象

在谷歌上搜索这个问题会导致很多实质性的东西显示出这种方法,但这并没有真正启发我对这个问题的看法。还有其他一些构建整个服务的方法,但无论如何,它们依赖于第三方弹出窗口

我只需要知道应该如何制定一个通用的方法。我担心跟随错误的博客可能会使我养成坏习惯

是否可以在视图中为组件提供服务弹出窗口?我应该用谷歌搜索什么来避免默认的材料/剑道会给视图带来阴影

编辑


根据评论,我觉得我可能会澄清,我已经做了研究,给了我建议,这似乎是唯一的选择。我只是觉得我不确定我是否真的做对了。我发现这一点很接近,但要过滤掉我的答案,开销太大,至少在我的技能水平上是如此。

借助rxjs Subject Observable。我们可以从utilservice打开一个弹出窗口。创建“showPopup”和“hidePopup”作为两个utils方法。这些方法将发出subject observable,因此观察者(在popup.component.ts中)可以接收并对其进行操作

utils.service.ts

private openPopup = new Subject();
public openPopupObservable = this.openPopup.asObservable();

showPopup(){
  this.openPopup.next(true);
}

hidePopup(){
  this.openPopup.next(false);
}
constructor(private utils: utilsService){}
ngOnInit(){
   this.utils.openPopupObservable.subscribe(isActive=>{
      this.poppyVisible = isActive
   });
}
popup.component.ts

private openPopup = new Subject();
public openPopupObservable = this.openPopup.asObservable();

showPopup(){
  this.openPopup.next(true);
}

hidePopup(){
  this.openPopup.next(false);
}
constructor(private utils: utilsService){}
ngOnInit(){
   this.utils.openPopupObservable.subscribe(isActive=>{
      this.poppyVisible = isActive
   });
}

如果你能用stackblitz或类似的方法创建一个你想要达到的最低限度的例子,那么应该更容易理解help@chrismclarke我的问题是,是否有可能选择策略A,或者我是否坚持策略B。我很乐意给出一系列关于Blitzy的例子,但在这个阶段,我不知道你希望看到什么。你能不能给我一些建议,告诉我你需要看些什么才能有所帮助?我仍然在努力完全理解这个问题。你能拥有一个“弹出式服务”吗?它是一种轻量级的服务,你可以在任何地方调用它来显示弹出式窗口?是的,这就是angular如何处理他们的对话框/祝酒词等,像toastr这样的各种软件包都有自己的方式,就像对门户的反应一样。尽管我感到困惑的地方是“在视图中”。我的意思是,它是否必须是模板的一部分,或者它是否只能位于外部(如在主应用程序组件中),并从视图中触发(如如何打开/关闭侧菜单)@chrismclarke Aha,我们开始吧。你的评论加上我的阅读,正好让我想到如何继续下去。这有点无形,但正是我需要看到的。我想我现在明白了。使用下面的答案可以进一步改进。但这并不是给我指明正确方向的答案。谢谢,伙计。