![](/img/trans.png)
[英]Uncaught TypeError: $rootScope.$on is not a function in Connectivity Factory
[英]Pass $rootScope parameter to named function in factory
我正在开发一个非常模块化的应用程序。 在这个应用程序中,我有一家工厂,其工作是从另一个模块向控制器发送通知。 为此,我使用$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]);
})();
在这种情况下,问题是在sendNotification
函数中未定义$rootScope
对象,这很明显。 但是我不知道如何解决这个问题。
我一直在互联网上寻找解决方案,事实是,如果不添加一些代码,很难很难清楚地表达问题,因此是我的帖子。
感谢您的考虑:)
如果使用服务而不是工厂,则可以使用this
转移注入的依赖项。 以这种方式使用服务,甚至更好,当你使用ES6类,让你稍微角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]);
})();
在您的notificationsFactory
声明sendNotification
-function-factory函数:
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;
....
}
};
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.