Angularjs $rootScope是Toast通知的好主意吗?

Angularjs $rootScope是Toast通知的好主意吗?,angularjs,rest,service,Angularjs,Rest,Service,我正在规划我的应用程序,在Angular中遇到了一个开发原则的问题。我有一个与API后端通信的应用程序,它将根据RESTAPI原则返回消息 下面是我正在使用的示例服务的一个片段: this.POST = function(url, data) { console.log(data); $http({ url: url, method: 'POST', data: data,

我正在规划我的应用程序,在Angular中遇到了一个开发原则的问题。我有一个与API后端通信的应用程序,它将根据RESTAPI原则返回消息

下面是我正在使用的示例服务的一个片段:

this.POST = function(url, data) {
        console.log(data);
        $http({
            url: url,
            method: 'POST',
            data: data,
            headers: headers
        }).
        success(function(data) {
            $rootScope.toasted = data;
        }).
        error(function() {
            $rootScope.toasted = 'There was an API communication error.';
        });
    };
现在,我屏幕顶部的一个div(Toast通知本身)将根据每个API函数(GET、POST、PUT、DELETE)的这些成功或错误状态进行更新。我正在使用
$rootScope
来做这件事,但我觉得有一种更安全、更好的方法来做这件事


我是否应该坚持使用
$rootScope
,这样我就可以随时更新应用程序中的任何位置的toast通知?或者我是否应该使用云计算
$rootScope
,并以某种方式使用控制器或其他服务来执行此功能?

最好尝试将您的应用程序的所有部分视为与其他应用程序关联的孤立位置(如果它们选择)

使用
$rootScope
的问题是,它会将那些属性强制到可能不关心它的子作用域上。您正在与希望拥有数据的作用域共享数据,但也在与不需要数据的作用域共享数据。使用
$rootScope
类似于声明全局变量,同样的原则也适用

共享数据通常通过一个服务完成,任何相关组件都可以通过注入该服务来选择加入该服务。根据具体情况,广播或发布事件也可能是合适的

在我看来,这涉及到三个方面:

  • 数据(对象或数组)
  • 处理数据的服务
  • 将数据绑定到UI的控制器

数据可以在其自己的服务中,也可以在处理数据的同一服务中。我不能不看细节就说哪一个最干净。当服务执行操作时,它可以
$broadcast
$rootScope
上播放一个事件,控制器可以通过
$scope.$on
选择该事件,并且它可以从事件或通过数据服务访问数据。

这取决于通知的复杂程度。如果您需要将内容抽象出来,那么您可能会将内容移动到控制器或服务,但是如果您只是显示一条消息,那么您可以使用$rootScope。您可能只想给它一个比“toasted”更复杂的名称,因为所有子作用域都将共享该值。