angularJs Error: [ng:areq] Argument ‘fn‘ is not a function, got undefined

今天做项目,重构一个组件的时候,无端报了一个这样的错!Error: [ng:areq] Argument ‘fn’ is not a function, got undefined,花了我很久的时间才找到这个错误!原来是因为我注册的component组件时候出了问题!项目结构比较复杂,我直接用一个最简单的例子来说下!

<body>
    <div ng-app="App">
        <custom-tag>
        </custom-tag>
    </div>
</body>
<script>
    angular.module("App", []).component("customTag", {

        template: "123",
        bindings: {
            uploadConfig: '<',
        },
        controllerAs: 'ctrl',
        transclude: true,
        controller: ["test", function (test) {

        }]
    }).service("test", function () {

    })
</script>

上面的例子很简单,注册一个’customTag’component和一个’test’service,并且这个’customTag’component注入这个’test’service,上面的代码是没有问题,能正常跑,但是你注册的service找不到构造函数的话就有问题的(因为项目比较复杂,不会这样注册),下面我直接写个undefined,看下面代码!

<body>
    <div ng-app="App">
        <custom-tag>
        </custom-tag>
    </div>
</body>
<script>
    angular.module("App", []).component("customTag", {

        template: "123",
        bindings: {
            uploadConfig: '<',
        },
        controllerAs: 'ctrl',
        transclude: true,
        controller: ["test", function (test) {

        }]
    }).service("test", undefined)
</script>

这样就会报错:
在这里插入图片描述
今天也是碰到这个问题,顺便发下项目的注册方法!(项目比较复杂,今天的这个问题也是找了很久才发现)

uibuilderModule.js

var BLANK_MODULE = {
    states: [],
    components: {},
    directives: {},
    services: {},
    filters: {},
    configBlocks: [],
    runBlocks: [],
    providers: {},
    factories: {}
};

/**
 * @param ngModule `angular.module()`对象
 * @param appModule 由组件、状态、服务等组成的功能模块
 * @description 注册每个app模块的状态、指令、组件、过滤器和服务,使用' uibuilderModule '配置/运行模块
 */
var appStartModule = angular.module(nainAppName, moduleList);

function registrationModule(ngModule, appModule) {
    var module = Object.assign({}, BLANK_MODULE, appModule);

    Object.keys(module.components).forEach(function (name) {
        ngModule.component(name, module.components[name]);
    });

    Object.keys(module.directives).forEach(function (name) {
        ngModule.directive(name, module.directives[name]);
    });

    Object.keys(module.services).forEach(function (name) {
        ngModule.service(name, module.services[name]);
    });

    Object.keys(module.providers).forEach(function (name) {
        ngModule.provider(name, module.providers[name]);
    });

    Object.keys(module.filters).forEach(function (name) {
        ngModule.filter(name, module.filters[name]);
    });

    Object.keys(module.factories).forEach(function (name) {
        ngModule.factory(name, module.factories[name]);
    });

    module.configBlocks.forEach(function (configBlock) {
        ngModule.config(configBlock);
    });

    module.runBlocks.forEach(function (runBlock) {
        ngModule.run(runBlock);
    });

    return ngModule;
};

exports.registrationModule = registrationModule;
exports.uibuilderModule = appStartModule;

上面代码是最终注册的地方,下面是services,components,directives,providers等的对象集合

index.bootstrap.js

var mainAppModule = {
    services: {
        restService: restService.service,
        fileService: fileService.service,
        productInstanceService: productInstanceService.service,
        builderConfigsService: builderConfigsService.service,
        simplifyBomService: simplifyBomService.service,
        propertyModelService: propertyModelService.service,
        builderUserDesign: builderUserDesign.service,
        productService: productService.service,
        productConfigRuntimeRestService: productConfigRuntimeRestService.service,
        productInstanceRestService: productInstanceRestService.service,
        propertyModelInitializeManager: propertyModelInitializeManager.service,
        indexManager: indexManager.service,
        commonFactory: commonFactory.service,
        konvaFactory: konvaFactory.service,
        simplifyBomManager: simplifyBomManager.service,
        productInstanceInitializeManager: productInstanceInitializeManager.service,
        builderViewRuntimeManager: builderViewRuntimeManager.service,
        oldSBomNodeDataManager: oldSBomNodeDataManager.service,
        newSBomNodeDataManager: newSBomNodeDataManager.service,
        navigationManager: navigationManager.service,
        uploadVerify: uploadVerifyService.uploadVerify,
        builderViewRuntimeConver: builderViewConver.BuilderViewRuntimeConver,
        imageLibraryManager: imageLibraryManager.service,
        konvaManager: konvaManager.service,
        konvaEditBoardManager: konvaEditBoardManager.service,
        canvasPageManager: canvasPageManager.service,
        layerPageManager: layerPageManager.service,
        publicBoardManager: publicBoardManager.service,
        builderTextRestService: builderTextRestService.service,
        pageContentSchemaManager: pcsManager.PageContentSchemaManager,
        pageContentRuntimeManager: pcRuntimeManager.PageContentRuntimeManager,
        pcElementsManager: pcElementsManager.PCElementsManager,
        uniqueIdGenerator: uniqueIdGenerator.UniqueIdGenerator,
        canvasManager: canvasManagerFile.CanvasManager,
        pageContentSchemaConstraintManager: pcsConstraintManager.PageContentSchemaConstraintManager,
        /**
         * singleViewBoard
         */
        pageContentConverterService: pageContentConverter_service.pageContentConverter,
        transformToolService: transformTool_service.transformToolService,
        konvaElementDeleteService: konvaElementDelete_service.konvaElementDeleteService,
        konvaElementMoveService: konvaElementMove_service.konvaElementMoveService,
        konvaElementCenterService: konvaElementCenter_service.konvaElementCenterService,
        konvaBgColorPanelService: konvaBgColorPanel_service.konvaBgColorPanelService,
        konvaBgImagePanelService: konvaBgImagePanel_service.konvaBgImagePanelService,
        konvaFontPanelService: konvaFontPanel_service.konvaFontPanelService,
        konvaUserPictureService: konvaUserPicture_service.konvaUserPictureService,
        konvaTipOnService: konvaTipOn_service.konvaTipOnService,
        CommandHistoryService: commandHistory.CommandHistoryService,
        boardScale: boardScale_service.boardScale,
        boardScaleService: boardScale_service.boardScale,
        pageContentEditor: pageContentEditor_service.pageContentEditor,
        konvaToolBarService: konvaToolBar_service.konvaToolBarService,
        algorithm: algorithm_service.algorithm,
        publicBoardManager: publicBoardManager.service,
        immediatelyManager: immediatelyManager.service,
        detailManager: detailManager.service,
        templateConfigsService: templateConfigsService.service
    },
    components: {
        imageLibrary: imageLibraryComponent.imageLibrary,
        progressBar: progressBarComponent.progressBar,
        picListPanel: picListPanelComponent.picListPanel,
        filesUpload: filesUploadComponent.filesUpload,
        openLibraryButton: openLibraryButtonComponent.openLibraryButton,
        errorMessage: errorMessageComponent.errorMessage,
        errorTips: errorTipsComponent.errorTips,
        fontLibrary: fontLibraryComponent.fontLibrary,
        fontPanel: fontPanelComponent.fontPanel,
        h1NavBar: h1NavBar.h1NavBar,
        diceNavBar: diceNavBar.diceNavBar,
        /**
         * singleViewBoard
         */
        imageEditor: imageEditor_component.imageEditor,
        textEditor: textEditor_component.textEditor,
        imgBrightness: imgBrightness_component.imgBrightness,
        toolBar: toolBar_component.toolBar,
        imgFilter: imgFilter_component.imgFilter,
        fontEditor: fontEditor.fontEditor,
        onLoading: onLoading.onLoading,
        singleViewUploadEditBoard: singleViewUploadEditBoard.singleViewUploadEditBoard,
        templateDownload: templateDownload.templateDownload,
        pdfUpload: pdfUpload.pdfUpload,
        thirdErrorTips: thirdErrorTips.thirdErrorTips,
        filesUploadPdf:filesUploadPdf.filesUploadPdf
    },
    directives: {
        singleViewEditBoard: singleViewEditBoard.singleViewEditBoardDirective,
        /**
         * singleViewBoard
         */
        singleViewBoard: singleViewBoard_directive.singleViewBoard,
        imageView: imageView_directive.imageView,
        command: command_directive.CommandDirective,
        boardElementCentered: boardElementCentered_directive.boardElementCentered,
        boardElementMoveTier: boardElementMoveTier_directive.boardElementMoveTier,
        boardElementUndoRedo: boardElementUndoRedo_directive.boardElementUndoRedo,
        boardElementDelete: boardElementDelete_directive.boardElementDelete,
        imgTransformEdit: imgTransformEdit_directive.imgTransformEdit,
        imgScaleEdit: imgScaleEdit_directive.imgScaleEdit,
        boardElementDrag: boardElementDrag_directive.boardElementDrag
    },
    providers: {
        command: commandFactory_provider.CommandFactory
    },
    configBlocks: [commandConfigBlock]
};

uibuilderModule.registrationModule(uibuilderModule.uibuilderModule, mainAppModule);
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值