我有一项需要外部库的服务,例如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);