javascript - 将服务注入(inject) Controller es6 语法

标签 javascript angularjs ecmascript-6

我正在尝试使用新的 es6 语法编写 angular app。准备好所有 Controller 和 View 逻辑并正常工作后,现在我想创建一个简单的共享服务。这是我的服务:

var moduleName = 'app.services';
class EventService{
    constructor($http, moment){
        this.$http = $http;
        this.baseUrl = '/api/events';     
    }

    getEvents(){
    return this.$http({method: 'GET', url: this.baseUrl});
    }
}


EventService.$inject = ['$http', 'moment'];

angular.module(moduleName, [])
    .factory('eventSrv', EventService);

export default moduleName;

app.js 用于注册模块:

// Import angular
import 'angular';
// Material design css
import 'angular-material/angular-material.css';
// Icons
import 'font-awesome/css/font-awesome.css';
// Animation
import angularAnimate from 'angular-animate';
// Materail Design lib
import angularMaterial from 'angular-material';
// Router
import angularUIRouter from 'angular-ui-router';
//angular messages
import ngMessages from 'angular-messages';
//angular md-table css
import 'angular-material-data-table/dist/md-data-table.min.css';
//angular md-table
import 'angular-material-data-table/dist/md-data-table.min';
//moment
import 'moment';
import 'angular-moment';

//modules
import home from './home/home.module';
import event from './events/event.module';
import sidenav from './sidenav/sidenav.module';
import eventService from './shared/services/events-service';

// Project specific style
import './scss/bootstrap.scss'

// Create module
export const mod = angular.module('app', [
    angularMaterial,
    angularAnimate,
    angularUIRouter,
    'angularMoment',
    'md.data.table',
    eventService,
    home,
    event,
    ngMessages,
    sidenav
]);

mod.config(($stateProvider,$urlRouterProvider) => {
    $stateProvider.state('public', {
        url: "/public",
        abstract: true,
        views: {
            'sidenav': {
                templateUrl: require("./sidenav/sidenav.html"),
                controller: "SidenavController as sidenav"
            }
        }
    });
    $urlRouterProvider.when('', ['$state', '$match', function($state, $match){
        $state.go('public.home');
    }]);

});

我想将服务提供/注入(inject)到我的家庭 Controller 中,如下所示:

class HomeController {
    constructor($scope, eventSrv) {
        'ngInject';
        var vm = this;
    }
}

HomeController.$inject = ['eventSrv'];
export default HomeController;

首页模块:

import HomeConfig from './home.config';
import HomeController from './home.controller';
require('./home.scss');

let homeModule = angular.module('app.home', []);

homeModule.config(HomeConfig);
homeModule.controller('HomeController', HomeController);

export default homeModule = homeModule.name

当我注入(inject)服务eventSrvhomecontroller时出现以下错误:

TypeError: Cannot call a class as a function

我在导入或配置中做错了什么?

最佳答案

eventSrv服务应该是service:

angular.module(moduleName, [])
    .service('eventSrv', EventService);

factory 服务应该与注入(inject)器直接调用的工厂函数一起使用,ES6 类应该是 newed。

关于javascript - 将服务注入(inject) Controller es6 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38640509/

相关文章:

从数组中选择/过滤对象并将其从原始数组中删除的 Javascript (ES6) 方法

javascript - "Operation is not supported"与 getCompulatedStyle

javascript - 检查 Gulp 中是否存在文件

javascript - 文章最后一行的文字颜色渐变

javascript - 使用新的 bindToController 语法时,双向绑定(bind)不起作用

angularjs - 有没有办法让 AngularJS 在开始时加载部分内容而不是在需要时加载?

javascript - Node 服务器仅返回index.html,不加载bundle.js或其他js文件

javascript - 为什么 Math.max(...[]) 在 ES2015 中等于 -Infinity?

javascript - 创建循环以在 React 中动态导入文件

javascript - momentjs 不会增加分钟数