要解决此问题,请使用publish/subscribe pattern,它允许获得松散耦合架构。
上的AngularJS应用一个伟大的图书馆是postaljs,允许实现了该模式easely:
定义在app.config
,这将是对应用程序的所有地方入店一个$bus
$范围变量:controlers,指令,...
app.config(function($provide) {
$provide.decorator('$rootScope', [
'$delegate',
function($delegate) {
Object.defineProperty($delegate.constructor.prototype,
'$bus', {
get: function() {
var self = this;
return {
subscribe: function() {
var sub = postal.subscribe.apply(postal, arguments);
self.$on('$destroy',
function() {
sub.unsubscribe();
});
},
channel: function() {
return postal.channel.apply(postal, arguments);
},
publish: function() { postal.publish.apply(postal, arguments); }
};
},
enumerable: false
});
return $delegate;
}
]);
});
发布
发布的产品的更新。
var channel = $scope.$bus.channel('myresources');
channel.publish("item.updated", data);
上发布列表来更新
var channel = $scope.$bus.channel('myresources');
....
channel.publish("list.updated", list);
订阅 控制器/指令需要被通知用于对 “为MyResources” 信道的事件。
var channel = $scope.$bus.channel("myresources");
....
//The wildcard * allow be notified on item/list. updated
channel.subscribe("*.updated", function(data, envelopment) {
doOnUpdated();
});
那么我基本上需要1个控制器的部分怎么知道如何处理发射事件呢?有没有办法让它们更通用,所以我可以从HTML模板中控制它们? – shaggeh