1

我正在尝试配置一个 ng-admin 应用程序。我想在开始配置之前从文件中加载一些数据,但是当我尝试在回调中执行此操作时,我收到以下错误:

Uncaught Error: [$injector:modulerr] Failed to instantiate module adminModule due to:
Error: [$injector:nomod] Module 'adminModule' is not available!
You either misspelled the module name or forgot to load it.
If registering a module ensure that you specify the dependencies as the second argument.

这是代码:

$.get('/api/schema', function buildNgConfig(data) {
    var adminModule = angular.module('adminModule', ['ng-admin']);
    adminModule.config(['NgAdminConfigurationProvider', function (nga) {
        var app = nga.application(data.label).baseApiUrl('/api/');
        // ...

如果我adminModule.config从 ajax 加载回调中取出(并使用页面中嵌入的数据,所以我不需要回调)并将所有内容放在全局范围内,它就可以工作。

如果我想在函数中初始化角度模块,我需要做些什么吗?

4

1 回答 1

3

好的,在朋友的帮助下解决了这个问题。该错误是 Angular 在创建模块之前自动初始化的结果。有:

<body ng-app="myApp">
    <div ui-view></div>

在你的 HTML 中告诉 Angular 立即初始化自己。在回调中延迟初始化意味着您的 Angular 模块将不存在,并且 Angular 初始化它的尝试将失败。

这里记录了 Angular 的引导过程,以及有关如何推迟初始化的说明。

要使其与 ng-admin 一起使用,请从正文中删除 ng-app:

<body>
    <div ui-view></div>

然后在你的应用 js 中,你可以推迟初始化。例如:

angular.element(document).ready(function() {
    var myApp = angular.module('myApp', ['ng-admin']);
    myApp.config(['NgAdminConfigurationProvider', function (nga) {
        var app = nga.application('My App').baseApiUrl('/api/');
        var someEntity = nga.entity(...
        // add entities
        nga.configure(app);
    }]);
    // Now we can manually boostrap
    angular.bootstrap(document, ['myApp']);
});

这等待页面加载而不是立即执行,并且所有内容都在回调范围内而不是全局范围内。

于 2016-01-14T05:34:50.573 回答