使用服务广播到控制器或从控制器双向绑定到服务

时间:2018-01-30 23:15:00

标签: angularjs architecture angularjs-scope

我有一个架构问题。

假设我有一个通知列表,可以与许多不同类型的控制器进行交互。

我知道有两种方法可以做到,但似乎无法决定:

service("Notifications", function(){
    var self = this;
    self.notificaitons = [];

    self.getNotificaitons(){
    ...
    }

    self.updateNotification(){
    ...
    }

})

controller("Controller1", function(
    Notifications
){

    scope.Notifications = Notifications
})
  

template.html

<div ng-repeat="notification in Notifications.notifications">

</div>

我们让控制器直接使用Notifications服务进行交互的第一种方式。这样做的好处是,这将启用双向绑定,因此我在服务中所做的任何更改都将自动传播到控制器。

第二种方式是这样的:

service("Notifications", function(){
    var self = this;
    self.notificaitons = [];

    self.subscribe = function(scope, callback) {
        var handler = $rootScope.$on('notification-event', callback);
    };



    self.getNotificaitons(){
    ...
    $rootScope.$emit('notification-event');
    }

    self.updateNotification(){
    ...
    $rootScope.$emit('notification-event');
    }

})

controller("Controller1", function(
    Notifications
){

    self.setListener = function(){
        Notifications.subscribe($scope, self.getNotifications());
    };

    self.getNotifications = function(){
        $scope.notifications = Notifications.notifications;
    }


})
  

template.html

<div ng-repeat="notification in notifications">

</div>

在这里,我们使用通知服务向正在收听的任何人广播。我喜欢这种方式,因为它更加分离,但同时它代码更多,维护更多。

也许有人有更多的经验,这可以告诉我一些事情。 我真的很感激。

0 个答案:

没有答案