AngularJS:从第三方库访问工厂或服务
AngularJS: Access a factory or service from 3rd party library
我的问题是:我正在构建一个主要基于angular的应用程序,但也使用了一些非angular代码。我将代码组织在模块中,包括一些工厂。特别是我有一个专门用于日志记录的工厂,它被注入到各个模块中。
如果我想从非angular打包的代码访问这个日志工厂,在那里我不能使用angular出色的依赖注入机制?
/* Angular app */
var app = angular.module('myApp', []);
app.factory('logger', function(){
return {
infos : [],
logInfo : function(msg) { this.infos.push(msg); }
};
});
app.controller('MyCtrl',['logger', function(logger){
...
logger.logInfo("Here I can use the dependency-injected logger");
...
}]);
/* Rest of the app */
someLib.someMethod(function(){
...
// var logger = angular.getFactory('logger') ?
logger.logInfo("Gee, how do I access my logger from here?");
...
});
我确实找到了解决这个问题的方法,但我觉得它不太令人满意,也不安全:
// Declare the logger globally
var logger = {
infos : [],
logInfo : function(msg) { this.infos.push(msg); }
};
// Still package it into a factory (although it's kinda pointless now)
app.factory('logger', function(){
return logger;
});
/* Rest of the app */
someLib.someMethod(function(){
...
logger.logInfo("Now logger is global, so I can access it from anywhere!");
...
});
所以…有没有办法在代码的非角部分注入依赖关系?
我要做的是将当前应用注入器分配给应用模块属性,这样以后就很容易访问它。在运行块中这样做很方便:
var app = angular.module('myApp', []);
app.run(function($injector) {
app.$injector = $injector;
});
现在,当你需要从非angular代码中获得一些服务时,你可以这样做:
var logger = app.$injector.get('logger');
或
var logger = angular.module('myApp').$injector.get('logger');
现在你可以用
someLib.someMethod(function() {
var logger = angular.module('myApp').$injector.get('logger');
logger.logInfo("Now logger is global, so I can access it from anywhere!");
});
相关文章:
- 将工厂服务数据发送到控制器,以便在视图中使用
- 如何在angular js中的工厂/服务中使用$cookie
- 使用工厂/服务在控制器AngularJS之间推送数组中的数据
- 有棱角的工厂服务问题
- 如何确定以前是否已注入有角度的工厂/服务
- 在 AngularJs 中,从工厂服务到控制器的返回值丢失
- AngularJS UI路由器在工厂/服务中使用已解决的依赖项
- 在创建工厂服务时,return$http.post在angular中到底意味着什么
- AngularJS在工厂服务中存储var中的$routeParam
- 将工厂/服务对象隔离到单个元素's指令
- AngularJS工厂服务中存在语法错误
- 如何处理AngularJS中的工厂服务错误
- Ionic Angular Js的工厂服务,工厂有另一个工厂
- Angular工厂服务变量创建机制
- 如何在ui-router resolve中使用发出Ajax请求的工厂/服务
- 如何处理angularjs工厂服务中的$http异步问题?
- AngularJS:在工厂服务中添加$scope时出错
- 在我的工厂服务返回后,数据显示为可见的HTML标记
- AngularJS:选项卡窗格的HTML标记各不相同,我希望它们是动态创建的,并填充由工厂服务提供的数据
- AngularJS的工厂服务函数没有响应(注入正确吗?)