如何将Angular服务用于非Angular对象中。

7 浏览
0 Comments

如何将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对象中吗?

0
0 Comments

问题的出现原因:

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中访问变量。

0