gpt4 book ai didi

javascript - 使用 RequireJS 加载时 Angular 无法实例化模块

转载 作者:数据小太阳 更新时间:2023-10-29 06:06:43 27 4
gpt4 key购买 nike

当我将 RequireJS 与 AngularJS 一起使用时,确实发生了一些奇怪的事情。我设法通过 RequireJS 加载了我所有的 Angular 依赖项。当我在 Chrome 的开发人员工具中打开“源” Pane 时,我可以看到这些脚本已下载。但是 Angular 一直在控制台中抛出错误,指出它未能实例化模块:

Uncaught Error: [$injector:modulerr] Failed to instantiate module MyTestApp due to:
Error: [$injector:nomod] Module 'MyTestApp' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure...<omitted>...0)

似乎 Angular 在加载 RequireJS 时无法与 HTML 页面中的 ng-app 标签绑定(bind)。我不确定是否是这种情况,但对我来说似乎是这样,因为当我手动将 angular.min.js 导入 HTML 页面时,一切正常。

在 Angular 中使用 RequireJS 时我做错了什么吗?我应该如何将两者一起使用?这是我的代码的样子:

index.html

<!doctype html>
<html lang="en" ng-app="MyTestApp">
<head>
<meta charset="utf-8">
<title>AngularJS</title>
<link rel="stylesheet" href="css/style.css"/>
<script data-main="main" src="js/require.js"></script>
</head>
<body>
<div ng-controller="TestController">{{helloMessage}}</div>
</body>
</html>

ma​​in.js

require.config({
baseUrl: "scripts/app",

shim: {
"angular": {
exports: "angular"
},
"angular.route": {
deps: ["angular"]
},
"bootstrapper": {
deps: ["angular", "angular.route"]
},

},

paths: {
"angular": "../angular",
"angular.route": "../angular-route",
"bootstrapper": "bootstrapper"
}
});

require(["angular", "angular.route", "bootstrapper"],
(angular, ngRoute, bootstrapper) => {
bootstrapper.start();
}
);

bootstrapper.js

function run() {
app = angular.module("MyTestApp", ["ngRoute"]);
app.controller("TestController", TestController);
console.log(app); //Prints object to console correctly, ie, angular was loaded.
}

最佳答案

这是我的做法 ( DEMO )。

main.js 中,需要 angular、你的应用程序,可能还有 controllers.js 和其他文件:

require(['angular', 'app'], function (app) {
angular.element(document).ready(function () {
angular.bootstrap(document, ['MyTestApp']);
});
});

app.js中,需要 Angular 和 Angular 路径:

define(['angular', 'angular.route'], function() {
var app = angular.module("MyTestApp", ["ngRoute"]);

return app;
});

这是手动引导,因此根本不需要 ng-app 标签。

我目前正在使用 angular 和 requirejs 开发一个相当大的应用程序,我更喜欢独立于 requirejs 加载整个应用程序使用的“大”库。所以我在开头加载了一个大文件,其中包括 angularangular-routerequirejsmain.js .或者,如果使用 CDN 版本有意义,从那里加载它。另一方面,我根据要求加载每个 Controller 、指令、过滤器和服务。我目前有 50 多个 Controller ,它们已经对初始加载时间产生了影响。

但这完全取决于您应用的大小。

关于javascript - 使用 RequireJS 加载时 Angular 无法实例化模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23060046/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com