我有一个架构问题。
假设我有一个通知列表,可以与许多不同类型的控制器进行交互。
我知道有两种方法可以做到,但似乎无法决定:
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>
在这里,我们使用通知服务向正在收听的任何人广播。我喜欢这种方式,因为它更加分离,但同时它代码更多,维护更多。
也许有人有更多的经验,这可以告诉我一些事情。 我真的很感激。