在回调函数中初始化ng管理模块



我正在尝试配置一个ng管理应用程序。我想在开始配置之前从文件中加载一些数据,但是当我试图在回调中这样做时,我会收到以下错误:

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(并使用嵌入页面中的数据,这样我就不需要回调),并将所有内容都放在全局范围内,它就可以工作了。

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

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

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

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

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

要使其与ng管理员一起工作,请从正文中删除ng应用程序:

<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']);
});

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

最新更新