【问题标题】:Instantiate Angular JS service using - injector.get()使用 - injector.get() 实例化 Angular JS 服务
【发布时间】:2021-03-09 02:58:07
【问题描述】:

我有一个 Angular 1.x 应用程序。现在有一个用例,我必须访问 ES6 类中的 Angular 1.x 服务/工厂,这些类不是 Angular JS 的一部分或注册到 Angular JS。简而言之,我想做一些事情,比如导出一个 Angular 服务并在 ES6 类中导入。我知道这不是直接可能的,但会有解决办法吗?

所以我有一个类似的服务

(function () {
    angular.module('myApp').service('ServiceOne', function () {
        return {
            property: value
        };
    });
})();

现在又多了一个 ES6 类(服务文件)...

import angular from 'angular';

// const $injector = angular.injector(['ng', 'myApp']);
// const ServiceOne = $injector.get('ServiceOne');
// const ServiceTwo = $injector.get('ServiceTwo');

class Es6Service {
    constructor() {
        //this.serviceOne = ServiceOne;
        //this.serviceTwo = ServiceTwo;
    }

    methodOne() {
        // code 
    }

    methodTwo() {
        // code
    }
}

export default Es6Service;

我知道injector.get('serviceName') 可以为我们获取服务实例,在我的情况下,我收到了未知提供者的错误。我的假设是这里可能缺少角度模块参考。

如果是这种情况,那么我如何在此处获取模块参考?还是有其他方法可以做到这一点?

谢谢

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    看起来很奇怪,但应该可以:

    import angular from 'angular';
    
    let _$injector;
    angular.module('myApp').run($injector => _$injector = $injector);
    
    class Es6Service {
        methodOne() {
            // Cannot call this method until angular initialize
            return _$injector.get(...)
        }
    

    【讨论】:

      猜你喜欢
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多