我有一项需要外部库的服务,例如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模块导入的库?

最佳答案

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

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

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

10-08 04:29