如何将Angular服务用于非Angular对象中。
如何将Angular服务用于非Angular对象中。
我有一个Angular服务
app.factory('MyService', function($http,$q)){ return{ super : function(){ return "Angular很棒"; } }; });
和一个在Angular范围之外定义的复杂JavaScript对象(控制器或服务):
var MyObject = { anyFunction : function(){ alert(MyService.super()); } };
现在,执行
MyObject.anyFunction();
当然会失败。有任何想法如何将MyService注入到我的外部JavaScript对象中吗?
问题的出现原因:
1. 在非Angular对象中使用Angular服务时,无法直接访问Angular的变量。
2. 遗留代码不支持直接访问Angular的变量。
解决方法:
1. 将Angular的变量保存到localStorage中,然后通过遗留代码从localStorage中访问。
2. 在工厂函数中使用$window服务访问全局变量。
常规JavaScript代码:
var myVar;
工厂函数代码:
app.factory('MyService', ['$window', '$http', '$q',function($window, $http, $q)){ return{ super : function(){ $window.myVar = 'that is it'; //或者 //localStorage.addItem('myVar', 'varValue'); } }; }]);
在调用MyService.super后,可以像之前一样在常规JavaScript中访问变量。