我正在开展角度教程,我在开始时遇到了问题。加载myApp模块会引发错误。如教程中所述,这应该是创建控制器的三种方法之一。
这是我正在研究的教程的打印屏幕:
当我刷新网页时,我在Chrome控制台中收到此错误:
Uncaught Error: [$injector:modulerr] Failed to instantiate module myApp due to:
Error: [$injector:nomod] Module 'myApp' 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.
这是我的HTML文件
<html ng-app="myApp">
<head>
</head>
<body>
<h1>Hello world!</h1>
<div ng-controller="MainController">
{{ 2+2 }}
<br>
{{ val }}
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.js"></script>
<script src="app.js">
</body>
</html>
这是我的app.js文件
var myApp = angular.module('myApp', []);
var MainController = function($scope){
$scope.val = "Main controller variable value"
}
那么我的问题是什么?我无法理解。
提前谢谢
答案 0 :(得分:9)
模块'myApp'不可用!您要么错误拼写了模块名称,要么忘记加载它。如果注册模块,请确保将依赖项指定为第二个参数。
您的原始问题是由于脚本标记无效。基本上你的脚本标签没有关闭,需要关闭它才能让浏览器下载app.js文件。脚本标签不是自动关闭的,因此它需要一个结束标记。
<script src="app.js">
应该是
<script src="app.js"></script>
现在一旦你修好了,你就会遇到另一个错误。
[ng:areq]参数'MainController'不是函数,未定义
由于您使用的是最新的角度版本,即任何&gt; = 1.3.x都需要使用.controller
构造手动注册控制器。 See here for more details
注意 - 它有点令人困惑,因为屏幕截图显示您使用的是1.2.0(不一定需要显式的控制器注册),但在1.4.x的问题中显示了片段。
答案 1 :(得分:5)
您应该将controller
注册到角度模块myApp
。
<强> App.js 强>
var myApp = angular.module('myApp', []);
myApp.controller('MainController', MainController );
var MainController = function($scope){
$scope.val = "Main controller variable value"
}
基本上你正在做的是正确的,但是AngularJS的旧版本后面跟着代码,你声明你的控制器的方式只不过是控制器As函数,它需要allowGlobals()
方法$controllerProvider
1}}。由于Angular 1.3 + allowGlobals()
方法是通过添加以下代码来禁用的,因此您可以将其打开,以使代码正常工作,但不建议这样做。
<强>配置强>
myApp.config(['$controllerProvider',
function($controllerProvider) {
$controllerProvider.allowGlobals();
}
]);
在此处提及SO Answer
答案 2 :(得分:2)
试试这个:
MathJax.Hub.Queue(["Typeset", MathJax.Hub]);
myApp.controller ("MainController",[$scope, function ($scope){
$scope.val = "Main controller variable value"
}]);
指令在MyApp模块中查找MainController。