使用服务根据点击事件更新 DOM

Update the DOM based on click event using service

我正在尝试使用服务根据点击事件更新 DOM。

具体来说,我正在尝试使用 bootstrap 的警报在用户单击页面上的特定按钮时提醒他们。例如,我希望能够调用 notify.createNotification("Saved successfully"),告诉用户他们已成功保存。

我正在使用 ui-router 并设法将通知抽象为(隔离范围)指令和随附的模板。当前 shows 通知已更新,在我的应用程序的头部(所有其他视图继承此视图)在 $scope.createNotification() 时(从点击事件中)。这是有效的,因为子视图继承了 $scope 属性。显然,这种对 $scope 继承的污染和滥用并不理想,因此我想将其全部移动到一个服务中。

我已经尝试使用工厂来更新 notification 对象,该对象包含警报的状态信息,即显示:true/false、文本等。问题在于工厂只是 returns 调用它的地方,我需要能够更新父级。

...我觉得我已经完成了 9/10 的工作,但最后的 1/10 真的让我感到困惑。

如有任何帮助,我们将不胜感激。

注意:我想我也在寻找 'best practices' 这里,我的意思是 $scope 污染有效,但它远非理想。谢谢

这可以使用 pub/sub 方法解决。

  1. 创建 NotificationService 用于发送通知。对于来电者,它看起来像 NotificationService.alert({text: '..', ...})
  2. 创建 <notification-area> 组件订阅 NotificationSerivce 并显示从任何地方发送的通知。
  3. NotificationService 本身应该实现 pub/sub 接口。使用 EventEmitter(如 this one)甚至 angular.element 的任何实现来提供 on(), off(), trigger() 方法。