angular.js:68未捕捉错误:[ng:areq]参数' fn'不是函数,得到了对象

时间:2016-04-22 18:44:08

标签: angularjs ecmascript-6

我正在转换我们的角度应用程序以使用ES6 Style语法,并在更改所有文件后,我收到以下错误;

angular.js:68未捕捉错误:[ng:areq]参数' fn'不是一个函数,得到了对象

当我尝试调试错误时,错误似乎在创建服务时出现。在角度代码中,这是发生错误的地方

return cache[serviceName] = factory(serviceName, caller);

我看到serviceName被传递正常,调用者是如何定义的,并且不确定为什么工厂无法返回服务实例。

由于

2 个答案:

答案 0 :(得分:0)

以下是我的github帐户中的完整代码。 https://github.com/mars76/angular-es6

我的入口点是app.js

import * as angular from 'angular';

import config from './app-config';

import run from './app-run-config';

import uiRouter from 'angular-ui-router';

import AppController from './app-controller';

import MyService from './my-service';

import * as serviceModule from './service';

import testDirective from './test-directive';

import muUtil from './util/util.js';
    export default angular.module("my-app", ['ui.router','my-service-module','myUtil'])

        .config(config)

        .run(run)

        .component('testDirective',testDirective())
        .controller('appController', AppController).name;

这依赖于模块“myUtil”

以下是该模块的内容

./ UTIL / util.js中

import * as utilRun from './util-run.js';
import * as MyService1 from './my-service1.js';
import * as MyService2 from './my-service2.js';

    export default angular.module('myUtil', [])

        .service('MyService1', MyService1)

        .service('MyService2', MyService2)

        .run(utilRun).name;

这是我的服务

服务1:

export default class MyService1{
    constructor(){

    }

    init(){
        console.log('In MyService1()');
    }
}

服务2:

    export default class MyService2{
    constructor(){

    }

    init(){
        console.log('In MyService2()');
    }
}

和util模块的运行功能

import MyService1 from './my-service1.js';
import MyService2 from './my-service2.js';

export default function utilRun(MyService1,MyService2){

    MyService1.init();
    MyService2.init();

}

utilRun.$inject =['MyService1','MyService2'];

答案 1 :(得分:0)

我遇到了同样的问题。就我而言,这只是导入问题。

此文档帮助我:import - JavaScript | MDN

服务导出为default,并且应该./util/util.js导入default

import MyService1 from './my-service1.js';
import MyService2 from './my-service2.js';

我建议错误

angular.js:68 Uncaught Error: [ng:areq] Argument 'fn' is not a function, got Object

有理由认为,以这种方式导入时服务为undefined

import * as MyService1 from './my-service1.js';
import * as MyService2 from './my-service2.js';

通配符导入不会导入默认值。这就是ES6语法中必须有特殊情况的原因:

import defaultMember, * as name from "module-name";