我正在研究一些Angular示例,并得到了一个有趣的异常场景&我想知道为什么会这样。
情景:
IT失败
- 当我在$(document)ready(function{ ... })
块
IT工作 - 当我完全创建我的控制器时
为什么吗 我确定你不应该像这样带入jQuery,但是,为什么它会失败?
在头部:
<script type="text/javascript">
var appName = 'personal.web';
var application = angular.module(appName, ['ngRoute']);
application.config(function ($httpProvider, $routeProvider, $controllerProvider, $compileProvider, $filterProvider, $provide, $locationProvider) {
// REQUIRED: Enables "late" registration
application.register = {
controller: $controllerProvider.register,
directive: $compileProvider.directive,
filter: $filterProvider.register,
factory: $provide.factory,
service: $provide.service
};
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
});
application.run(function ($http) {
console.log(appName + ' is running');
});
</script>
在身体中:
<div class="container" ng-controller="HomeIndexController">
<div class="row">
<h3>Home Body</h3>
</div>
</div>
<div class="container">
<div class="row" ng-view></div>
</div>
在页面底部:
失败:具有此名称的控制器未注册
<script type="text/javascript">
$(document).ready(function () {
application.controller('HomeIndexController', function ($scope) {
var vm = this;
console.log('HomeIndexController');
});
}); </script>
WORKS
application.controller('HomeIndexController', function ($scope) {
var vm = this;
console.log('HomeIndexController');
});
答案 0 :(得分:1)
它失败了,因为在角度开始后文档就绪,所以你的应用程序正在寻找一个尚不存在的组件。它失败了......
答案 1 :(得分:1)
失败的原因是$(document).ready
,angular会在呈现视图之前注册controllers
,services
等等。但是你在controller
中定义了document.ready
这已经太迟了,以至于angular会抛出无法找到控制器的错误。