AngularJS代码只在html文件中运行,而不在外部文件中运行
AngularJS code only runs in the html file, not in an external file
这个AngularJS代码在位于HTML文件中时工作:
<!DOCTYPE html>
<html lang="en" ng-app="ChgReqApp">
<head>
<link rel="shortcut icon" href="IM/Coins.png" />
<title>TITLE</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<!-- Change to min -->
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.js"></script>
<script>
angular.module('ChgReqApp', []);
angular.module('ChgReqApp').controller('MainController', function ($scope) {
$scope.ClientInfo = {};
$scope.ChangeRequests = [];
});
</script>
<script src="JS/MainController.js"></script>
</head>
<body ng-cloak ng-controller="MainController">
</body>
</html>
主控制器.js文件如下所示,警报对话框按预期工作:
// MainController.js
$(function () {
alert("MainControllerFile");
});
现在,当我将控制器代码移动到 MainController.js 文件时,出现错误:
<!DOCTYPE html>
<html lang="en" ng-app="ChgReqApp">
<head>
<link rel="shortcut icon" href="IM/Coins.png" />
<title>TITLE</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"> </script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<!-- Change to min -->
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.js"></script>
<script>
angular.module('ChgReqApp', []);
</script>
<script src="JS/MainController.js"></script>
</head>
<body ng-cloak ng-controller="MainController">
</body>
</html>
//MainController.js
$(function () {
angular.module('ChgReqApp').controller('MainController', function ($scope) {
$scope.ClientInfo = {};
$scope.ChangeRequests = [];
});
});
错误是:
Error: [ng:areq] Argument 'MainController' is not a function, got undefined
http://errors.angularjs.org/1.4.8/ng/areq?p0=MainController&p1=not%20a%20function%2C%20got%20undefined
at ...
我已经搜索了这个问题的解决方案,但我发现的所有讨论都与不适用于上述代码的其他一些问题有关。 外部 js 文件有效,脚本顺序正确。 非常感谢对此的任何帮助。
$(function() {})
,因为Angular有自己的"文档就绪业务"(只是为了简化到最大的:P)。
问题是 Angular 无法运行其"Document Ready Business",因为您将 Angular 内容放入 jQuery 的"Document Ready"速记中,这会阻止 Angular 框架正常工作。
您可以在 Angular 的文档中找到更多相关信息
Angular 在 DOMContentLoaded 事件或以下情况下自动初始化 如果当时 document.readyState ,则评估 angular.js 脚本 设置为"完成"。此时,Angular 会寻找 ng-app 指令,指定应用程序根目录。
我想你可以看到这与你想做的事情是如何冲突的。
同样作为附加建议,如下所示:
angular.module('ChgReqApp', []).controller('MainController', function($scope) {
$scope.ClientInfo = {};
$scope.ChangeRequests = [];
});
或像这样(我的偏好)
var app = angular.module('ChgReqApp', []);
app.controller('MainController', function($scope) {
$scope.ClientInfo = {};
$scope.ChangeRequests = [];
});
(function() {
angular
.module("ChgReqApp", [])
.controller("MainController", MainController);
MainController.$inject = ["$scope"];
function MainController($scope) {
$scope.ClientInfo = {};
$scope.ChangeRequests = [];
};
})();
您可以在此处阅读更多信息:https://github.com/johnpapa/angular-styleguide
这就是我发现解决我的问题的原因......
-
CHROME浏览器正在缓存(主控制器.js)
-
我通过查看(Chrome devtools,网络选项卡,主控制器.js文件,响应选项卡)(* 代码不同*)
在Chrome中打开一个新标签页(修复了缓存的主控制器.js文件)
我遇到了同样的问题。我只是想在外部的主控制器.js文件中放置一些值。
<script src="./js/controllers/MainController.js"></script>
由于某种原因它不起作用(从这个文件)...
但。。。当我直接从 HTML 文件进行测试时(它有效)
app.controller('MainController', ['$scope', function($scope) {
// SCOPE
$scope.test = "test(HTML FILE)";
$scope.test2 = 'test2(HTML FILE)';
}]);
。但不在外部文件中?
停用缓存 (CHROME)
- 打开 CHROME, (开发工具), 网络 选项卡, 单击 (打开) (禁用缓存)
试试这个
<!DOCTYPE html>
<html lang="en" ng-app="ChgReqApp">
<head>
<link rel="shortcut icon" href="IM/Coins.png" />
<title>TITLE</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"> </script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<!-- Change to min -->
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.js"></script>
<script src="JS/MainController.js"></script>
</head>
<body ng-cloak ng-controller="MainController">
</body>
</html>
主控制器.js
angular.module('ChgReqApp').controller('MainController', function ($scope) {
alert('in main controller');
$scope.ClientInfo = {};
$scope.ChangeRequests = [];
});
- 使用压缩的JavaScript文件(不是运行时压缩)
- Javascript运行php文件,然后下载文件
- 从Chrome扩展名中的popup.html文件在background.js文件中运行一个函数
- 如何从“”运行url;.js”;文件
- 如何使用Gmail运行.js文件
- 如何运行从TFS获取项目的windows脚本文件
- 在Node Webkit应用程序中从DOM单击按钮时运行批处理文件
- 是否可以从javascript文件中将量角器作为模块运行
- Meteor发布/订阅无法从服务器文件夹中运行
- 如何显示由ajax调用运行的PHP文件的echo
- 通过Wordpress中的jquery调用运行php文件
- 从JavaScript文件运行Firebug Lite
- 如何在Grunt.js中观察多个文件,但只在更改的文件上运行任务
- 如何在 node.js 中创建和运行文件
- 如何在使用 nsIProcess 运行文件时隐藏命令提示符窗口.bat
- 文件下载完成后运行文件
- 打开程序但不运行文件的HTA页面
- React-只运行文件一旦外部js文件加载(gapi未定义)
- 从终端运行文件代码(启动本地网站)
- 运行文件.未附加的HTML元素的getElementById