0

我第一次尝试以本指南为基础将 AngularJS 与 RequireJS 结合使用。据我所知,经过大量调试后,我正在以正确的顺序加载所有模块,但是当应用程序运行时,Angular 会引发错误/异常,并显示以下消息:

参数 'fn' 不是函数,从 myApp 获取字符串

由于语法错误,我之前已经看到此消息,因此即使我多次查看代码,我也不排除简单语法错误的可能性。暂时不要制作小提琴,以防它像语法错误一样简单,但如果需要,我当然会这样做。

更新:我刚刚注意到在<html>标签中设置 ng-app="myApp" 时,我还收到了一个额外的错误,

没有模块:myApp

更新二:好的,事实证明它确实是下面未包含的唯一文件中的语法错误。尽管我仍然遇到更新 I 的问题。

RequireJS 引导程序

'use strict';
define([
    'require',
    'angular',
    'app/myApp/app',
    'app/myApp/routes'

], function(require, ng) {
    require(['domReady'], function(domReady) {
        ng.bootstrap(domReady, ['myApp']);
    });
});

应用程序.js

'use strict';
define([
    'angular',
    './controllers/index'
], function(ng) {
    return ng.module('myApp', [
         'myApp.controllers'
    ]);
    }
);

控制器/索引

'use strict';
define([
    './front-page-ctrl'
], function() {

});

控制器/模块

'use strict';
define(['angular'], function (ng) {
    return ng.module('myApp.controllers', []);
});

控制器/首页-ctrl

'use strict';
define(['./module'], function(controllers) {
    controllers.
        controller('FrontPageCtrl', ['$scope', 
             function($scope) {
                console.log('I\'m alive!');
            }
        ]);
});
4

2 回答 2

1

从您的 html 中删除 ng-app="myApp"。因为它已经手动引导 ng.bootstrap(domReady, ['myApp']);

于 2015-04-11T11:28:28.570 回答
0

Dom 就绪状态的 RequireJS 文档:

由于 DOM 就绪是一种常见的应用程序需求,理想情况下可以避免上述 API 中的嵌套函数。domReady 模块还实现了 Loader Plugin API,因此您可以使用 loader 插件语法(注意 domReady 依赖项中的 !)强制 require() 回调函数在执行之前等待 DOM 准备好。domReady 用作加载器插件时将返回当前文档:

因此,当您需要“domReady”时,结果是一个函数:

function domReady(callback) {
    if (isPageLoaded) {
        callback(doc);
    } else {
        readyCalls.push(callback);
    }
    return domReady;
} 

但是,当您附加domReady带有符号的字符串时!,结果将是实际的文档元素:

'use strict';
define([
    'require',
    'angular',
    'app/myApp/app',
    'app/myApp/routes'

], function(require, ng) {
    require(['domReady!'], function(domReady) {
        // domReady is now a document element
        ng.bootstrap(domReady, ['myApp']);
    });
});
于 2013-11-01T10:23:35.383 回答