在回调函数

时间:2016-01-09 23:04:07

标签: angularjs ng-admin

我正在尝试配置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/');
        // ...

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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

Angular的引导过程记录here,以及如何推迟初始化的说明。

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

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

然后在你的app 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']);
});

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