AngularJS - 找不到控制器
AngularJS - Controller can't be found
所以我尝试制作一个脚本来加载我的 AngularJS
应用程序所需的文件。
但是当我 运行 Angular.bootstrap
部分时我得到这个错误
Error description at AngularJS home page
此错误是由于 AngularJS
无法找到我的 masterController
为什么会这样。我已经检查过模块的名称以及控制器的名称是否匹配,它们确实匹配。所以我很困惑为什么我不认识控制器。
我的代码如下所示:
Index.html
<!doctype html>
<html ng-controller="masterController">
<head>
<!-- META -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"><!-- Optimize mobile viewport -->
<meta name="author" content="Michael Tot Korsgaard">
<title>Mythodea map explorer</title>
<link rel="icon" type="image/png" href="favicon.png">
<script src="lib/JQuery/1.12.3/jquery.min.js"></script>
<script src="lib/AngularJS/1.5.5/angular.min.js"></script>
<script src="lib/AngularJS/1.5.5/angular-animate.min.js"></script>
<script src="lib/AngularJS/1.5.5/angular-aria.min.js"></script>
<script src="lib/UI-Router/0.2.18/ui-router.min.js"></script>
<script src="lib/moment/2.13.0/moment.js"></script>
<script src="js/log.js"></script>
<script src="js/build.js"></script>
</head>
<body ng-cloak>
<div ui-view></div>
</body>
</html>
core.js
var app = angular.module('AcademiaUnitate', [
'ui.router',
'ngAnimate'
]);
master.controller.js
angular.module('AcademiaUnitate')
.controller('masterController', function ($scope) {
});
build.js 我的 angular 文件被添加到我的 <head>
标签
var buildStart = moment(),
fileCounter = 0;
initialize();
function initialize(){
loadJson('app')
.done(function(response){
var files = response.files,
folders = response.folders;
getFiles(files, 'app')
.done(function(response){
getFolders(folders, 'app')
.done(function(response){
bootstrap();
});
})
});
}
function getFolders(folders, path){
var deferred = $.Deferred();
if(folders.length > 0){
loadFolder(path + '/' + folders[0])
.done(function(response){
folders.splice(0, 1);
getFolders(folders, path)
.done(function(response){
deferred.resolve(response);
});
});
} else {
deferred.resolve(true);
}
return deferred.promise();
}
function getFiles(files, path){
var deferred = $.Deferred();
if(files.length > 0){
loadFile(path + '/' + files[0])
.done(function(response){
files.splice(0, 1);
getFiles(files, path)
.done(function(response){
deferred.resolve(response);
});
});
} else {
deferred.resolve(true);
}
return deferred.promise();
}
function loadFile(src){
var defer = $.Deferred(),
fileType = src.substring(src.lastIndexOf(".") + 1, src.length);
var head = $('head');
fileCounter++;
if(fileType.toLowerCase() === 'js'){
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = src;
document.getElementsByTagName('head')[0].appendChild(script);
defer.resolve(true);
} else {
defer.resolve(true);
}
return defer.promise();
}
function loadFolder(path){
var defer = $.Deferred();
loadJson(path)
.done(function(response){
var folders = response.folders,
files = response.files;
if(folders !== undefined){
getFolders(folders, path)
.done(function(response){
if(files !== undefined){
getFiles(files, path)
.done(function(response){
defer.resolve(response);
});
} else {
defer.resolve(response);
}
});
} else {
if(files !== undefined){
getFiles(files, path)
.done(function(response){
defer.resolve(response);
});
} else {
defer.resolve(response);
}
}
});
return defer.promise();
}
function loadJson(path){
var defer = $.Deferred();
$.get(path + '/structure.json', function(response) {
defer.resolve(response);
});
return defer.promise();
}
function bootstrap(){
$(document).ready(function(){
var bootstrapStart = moment();
angular.bootstrap(function(){
});
});
}
我的 build.js 文件所做的是找到文件 structure.json
,它告诉要将哪些 js
文件添加到 <head>
标记,然后要查找哪些文件夹额外 structure.json
个文件。当所有这些都完成后,angular 将被引导。
您可能应该考虑正确命名您的控制器
angular.module('AcademiaUnitate')
.controller('MasterController', function MasterController($scope) {
});
请在 https://docs.angularjs.org/guide/controller and an example at https://docs.angularjs.org/tutorial/step_02
查看最新 angular1 版本的控制器文档
如果您的所有 angular 代码都在一个文件中,您可能需要执行以下操作:
1) 将控制器链接到 angular.module()
之后/
angular.module('AcademiaUnitate', [
'ui.router',
'ngAnimate'
]).controller('MasterController', function MasterController($scope) {
});
或 2) 使用应用程序变量
var app = angular.module('AcademiaUnitate', [
'ui.router',
'ngAnimate'
]);
app.controller('MasterController', function MasterController($scope) {
});
Angular 引导应用程序时,缺少包含主控制器功能的文件。包括文件。帮帮这个帮
您的 index.html 中没有包含 core.js。这就是找不到您的控制器的原因。尝试包含它。
<script src="core.js"></script>
你可能忘了加上ng-app="AcademiaUnitate"
,直接把<html ng-controller="masterController">
改成<html ng-app="AcademiaUnitate" ng-controller="masterController">
我发现了问题,这是我引导应用程序的方式必须改变
angular.bootstrap(function(){});
进入
angular.bootstrap(document, ['AcademiaUnitate']);
所以我尝试制作一个脚本来加载我的 AngularJS
应用程序所需的文件。
但是当我 运行 Angular.bootstrap
部分时我得到这个错误
Error description at AngularJS home page
此错误是由于 AngularJS
无法找到我的 masterController
为什么会这样。我已经检查过模块的名称以及控制器的名称是否匹配,它们确实匹配。所以我很困惑为什么我不认识控制器。
我的代码如下所示:
Index.html
<!doctype html>
<html ng-controller="masterController">
<head>
<!-- META -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"><!-- Optimize mobile viewport -->
<meta name="author" content="Michael Tot Korsgaard">
<title>Mythodea map explorer</title>
<link rel="icon" type="image/png" href="favicon.png">
<script src="lib/JQuery/1.12.3/jquery.min.js"></script>
<script src="lib/AngularJS/1.5.5/angular.min.js"></script>
<script src="lib/AngularJS/1.5.5/angular-animate.min.js"></script>
<script src="lib/AngularJS/1.5.5/angular-aria.min.js"></script>
<script src="lib/UI-Router/0.2.18/ui-router.min.js"></script>
<script src="lib/moment/2.13.0/moment.js"></script>
<script src="js/log.js"></script>
<script src="js/build.js"></script>
</head>
<body ng-cloak>
<div ui-view></div>
</body>
</html>
core.js
var app = angular.module('AcademiaUnitate', [
'ui.router',
'ngAnimate'
]);
master.controller.js
angular.module('AcademiaUnitate')
.controller('masterController', function ($scope) {
});
build.js 我的 angular 文件被添加到我的 <head>
标签
var buildStart = moment(),
fileCounter = 0;
initialize();
function initialize(){
loadJson('app')
.done(function(response){
var files = response.files,
folders = response.folders;
getFiles(files, 'app')
.done(function(response){
getFolders(folders, 'app')
.done(function(response){
bootstrap();
});
})
});
}
function getFolders(folders, path){
var deferred = $.Deferred();
if(folders.length > 0){
loadFolder(path + '/' + folders[0])
.done(function(response){
folders.splice(0, 1);
getFolders(folders, path)
.done(function(response){
deferred.resolve(response);
});
});
} else {
deferred.resolve(true);
}
return deferred.promise();
}
function getFiles(files, path){
var deferred = $.Deferred();
if(files.length > 0){
loadFile(path + '/' + files[0])
.done(function(response){
files.splice(0, 1);
getFiles(files, path)
.done(function(response){
deferred.resolve(response);
});
});
} else {
deferred.resolve(true);
}
return deferred.promise();
}
function loadFile(src){
var defer = $.Deferred(),
fileType = src.substring(src.lastIndexOf(".") + 1, src.length);
var head = $('head');
fileCounter++;
if(fileType.toLowerCase() === 'js'){
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = src;
document.getElementsByTagName('head')[0].appendChild(script);
defer.resolve(true);
} else {
defer.resolve(true);
}
return defer.promise();
}
function loadFolder(path){
var defer = $.Deferred();
loadJson(path)
.done(function(response){
var folders = response.folders,
files = response.files;
if(folders !== undefined){
getFolders(folders, path)
.done(function(response){
if(files !== undefined){
getFiles(files, path)
.done(function(response){
defer.resolve(response);
});
} else {
defer.resolve(response);
}
});
} else {
if(files !== undefined){
getFiles(files, path)
.done(function(response){
defer.resolve(response);
});
} else {
defer.resolve(response);
}
}
});
return defer.promise();
}
function loadJson(path){
var defer = $.Deferred();
$.get(path + '/structure.json', function(response) {
defer.resolve(response);
});
return defer.promise();
}
function bootstrap(){
$(document).ready(function(){
var bootstrapStart = moment();
angular.bootstrap(function(){
});
});
}
我的 build.js 文件所做的是找到文件 structure.json
,它告诉要将哪些 js
文件添加到 <head>
标记,然后要查找哪些文件夹额外 structure.json
个文件。当所有这些都完成后,angular 将被引导。
您可能应该考虑正确命名您的控制器
angular.module('AcademiaUnitate')
.controller('MasterController', function MasterController($scope) {
});
请在 https://docs.angularjs.org/guide/controller and an example at https://docs.angularjs.org/tutorial/step_02
查看最新 angular1 版本的控制器文档如果您的所有 angular 代码都在一个文件中,您可能需要执行以下操作: 1) 将控制器链接到 angular.module()
之后/angular.module('AcademiaUnitate', [
'ui.router',
'ngAnimate'
]).controller('MasterController', function MasterController($scope) {
});
或 2) 使用应用程序变量
var app = angular.module('AcademiaUnitate', [
'ui.router',
'ngAnimate'
]);
app.controller('MasterController', function MasterController($scope) {
});
Angular 引导应用程序时,缺少包含主控制器功能的文件。包括文件。帮帮这个帮
您的 index.html 中没有包含 core.js。这就是找不到您的控制器的原因。尝试包含它。
<script src="core.js"></script>
你可能忘了加上ng-app="AcademiaUnitate"
,直接把<html ng-controller="masterController">
改成<html ng-app="AcademiaUnitate" ng-controller="masterController">
我发现了问题,这是我引导应用程序的方式必须改变
angular.bootstrap(function(){});
进入
angular.bootstrap(document, ['AcademiaUnitate']);