我正在开发一个非常模块化的应用程序。在这个应用程序中,我有一个工厂,其工作是从另一个模块向控制器发送通知。为此,我使用$rootScope
对象来触发名为newNotification
的事件并传递数据。
使用以下代码一切正常:
notifications.factory.js
(function() {
'use strict';
function notificationsFactory($rootScope) {
return {
sendNotification: function(data) {
switch(data.type) {
case 'actors':
$rootScope.$broadcast('newNotification', data);
break;
.....
}
}
}
};
angular.module('features.notifications.factory', [])
.factory('notificationsFactory', ['$rootScope', notificationsFactory]);
})();
那么,问题是什么?嗯,问题是,为了获得更干净的工厂,因为将添加更多功能,目的是返回具有命名功能的对象。
为了更清楚一点,我的目标是看起来像这样:
notifications.factory.js
(function() {
'use strict';
function notificationsFactory($rootScope) {
return {
sendNotification: sendNotification
}
};
function sendNotification(data) {
switch(data.type) {
case 'actors':
$rootScope.$broadcast('newNotification', data);
break;
....
}
};
angular.module('features.notifications.factory', [])
.factory('notificationsFactory', ['$rootScope', notificationsFactory]);
})();
在这种情况下,问题是$rootScope
函数中没有定义sendNotification
对象,这很明显。但我无法弄清楚如何解决这个问题。
我在互联网上寻找解决方案,事情是,如果没有放一些代码就很难明确表达问题,因此我的帖子。
感谢您的考虑:)
答案 0 :(得分:3)
如果您使用服务而不是工厂,则可以使用this
传输注入的依赖项。当您使用ES6类时,以这种方式使用服务会更好,并使您略微更多Angular 2.0准备就绪。
(function() {
'use strict';
function NotificationsService($rootScope) {
this.$rootScope = $rootScope;
};
NotificationsService.prototype.sendNotification = function sendNotification(data) {
switch(data.type) {
case 'actors':
this.$rootScope.$broadcast('newNotification', data);
break;
....
}
};
angular.module('features.notifications.service', [])
.service('NotificationsService', ['$rootScope', NotificationsService]);
})();
ES6版本:
(function() {
'use strict';
class NotificationsService {
constructor($rootScope) {
this.$rootScope = $rootScope;
}
sendNotification(data) {
switch(data.type) {
case 'actors':
this.$rootScope.$broadcast('newNotification', data);
break;
....
}
}
}
angular.module('features.notifications.service', [])
.service('NotificationsService', ['$rootScope', NotificationsService]);
})();
答案 1 :(得分:1)
在sendNotification
- 工厂函数中声明notificationsFactory
- 函数:
function notificationsFactory($rootScope) {
function sendNotification(data) {
switch(data.type) {
case 'actors':
$rootScope.$broadcast('newNotification', data);
break;
....
}
};
return {
sendNotification: sendNotification
}
};
或使用服务代替工厂,你可以这样写:
function notificationsFactory($rootScope) {
this.sendNotification = function(data) {
switch(data.type) {
case 'actors':
$rootScope.$broadcast('newNotification', data);
break;
....
}
};
};