如何在Angularjs服务中使用作为ES6模块导入的外部JavaScript库?

时间:2019-04-30 19:36:30

标签: javascript angularjs

我有一项需要外部库的服务,例如moment。我将该库导入为ES6模块。但是,由于使用闭包方法定义了AngularJS服务,因此在调用funcA()时库不可用。

service.js

import moment from 'moment';
export function DataService() {
    return { 

        funcA: function() {
            return moment().startOf('day').fromNow(); 
        } 
    };
}

controller.js

MyCtrl.$inject = ['$scope', '$state', 'DataService', ...];
export function MyCtrl($scope, $state, DataService, ...) {

    function setInitialDate () {
      ctrl.someDate = DataService.funcA();
    }
}

app.js

import {DataService} from './service.js';
import {MyCtrl} from './controller.js';

var services = angular.module('services', []); 
services.factory('DataService', DataService);

angular.module('mycontrollers').controller('MyCtrl', MyCtrl);

我可以将外部库导入窗口对象,并使用$window在服务内部访问它。是否有其他方法可以从AngularJS服务中访问作为ES6模块导入的库?

1 个答案:

答案 0 :(得分:0)

将工厂和控制器放在同一模块中

import {DataService} from './service.js';
import {MyCtrl} from './controller.js';

angular.module('app',[])
.factory('DataService', DataService);
.controller('MyCtrl', MyCtrl);