我正在转换我们的角度应用程序以使用ES6 Style语法,并在更改所有文件后,我收到以下错误;
angular.js:68未捕捉错误:[ng:areq]参数' fn'不是一个函数,得到了对象
当我尝试调试错误时,错误似乎在创建服务时出现。在角度代码中,这是发生错误的地方
return cache[serviceName] = factory(serviceName, caller);
我看到serviceName被传递正常,调用者是如何定义的,并且不确定为什么工厂无法返回服务实例。
由于
答案 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";