gpt4 book ai didi

angularjs - 切换到 webpack 时出现 Angular "Module is not available"

转载 作者:行者123 更新时间:2023-12-04 17:46:46 38 4
gpt4 key购买 nike

我的项目正试图从纯 Javascript 脚本切换到 webpack。我们有一个 html 文件 game.html,它包含以下内容:

<html>
...
<script src="bundle.js"></script>
...
<div ng-app="visualizerApp" ng-controller="VisualizerController as ctrl">
...
</div>
...
</html>

在切换到 webpack 之前,我们只有一长串脚本。

angular 模块在文件 app.js 中创建

import angular from 'angular';

class VisualizerController {...}

VisualizerController.$inject = ['$scope', '$rootScope'];

angular.module('visualizerApp', []).controller('VisualizerController', VisualizerController);

在切换之前,除了 import 语句外,文件是相同的。

打开 html 文件时,控制台出现错误:

[$injector:modulerr] Failed to instantiate module visualizerApp due to:
Error: [$injector:nomod] Module 'visualizerApp' 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.

为什么会发生这种情况,我该如何解决?

编辑:我的 webpack.config.js

const path = require('path');
const mapType = require('./root/visualizer/js/map/PluginManager').mapType;


module.exports = {
entry: './plugins/root/visualizer/js/main.js',
output: {
filename: '../game_logs/bundle.js'
},
module: {
rules: [
{
test: /\.js$/,
exclude: /tests/,
use: {
loader: 'babel-loader',
options: {
presets: ['babel-preset-env']
}
}
}
]
},
resolve: {
alias: {
mapPlugin: path.resolve(__dirname, 'map/' + mapType),
}
}
};

库版本:

├── angular@1.6.8
├── babel-cli@6.26.0
├── babel-loader@7.1.2
└── webpack@3.10.0

最佳答案

看起来 angular 已加载,但您的其他脚本未加载。我将从查看 bundle.js 开始,以确保您期望的内容确实存在。

您还没有分享您的 webpack 配置,因此很难确切地说出发生了什么。 Webpack 改变了脚本加载的动态方式。

我还建议使用 angular.bootstrap 代替 ng-app 来引导您的应用程序。

尝试以下操作:

<html>
...
<script src="bundle.js"></script>
...
<div id="visualizerApp" ng-controller="VisualizerController as ctrl">
...
</div>
...
</html>

在你的 Javascript 中:

import angular from 'angular';

class VisualizerController {...}

VisualizerController.$inject = ['$scope', '$rootScope'];

angular
.module('visualizerApp', [])
.controller('VisualizerController', VisualizerController);

angular.element(document).ready(function() {
let container = document.querySelector('#visualizerApp');
angular.bootstrap(container, ['visualizerApp'])
});

angular.bootstrap 允许您管理应用程序何时启动。不仅仅是 Angular 载荷。

Here's a working fiddle它使用 angularjs 1.5.6 和 ES5。

关于angularjs - 切换到 webpack 时出现 Angular "Module is not available",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48117481/

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