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

问题描述 投票:0回答:1

我有一个需要外部库的服务,例如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对象中,并使用$window访问服务。是否存在从AngularJS服务内部访问作为ES6模块的库的其他方法?

javascript angularjs
1个回答
0
投票

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

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

angular.module('app',[])
.factory('DataService', DataService);
.controller('MyCtrl', MyCtrl);
© www.soinside.com 2019 - 2024. All rights reserved.