背景
image.png有读者反馈,按照书《 全栈开发之道:MongoDB+Express+AngularJS+Node.js 》第9章调试程序,出现诡异的报错,如下:
看到这种错误,晕倒,直接在AngularJS模块内部报错,很抽象,一时无从下手。
先这段代码,如下:
<!DOCTYPE html>
<html ng-app='app'>
<head>
<title> Hello World in AngularJS </title>
<script src="http://apps.bdimg.com/libs/angular.js/1.2.6/angular.min.js"></script>
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular-route.min.js"></script>
</head>
<body>
<div ng-view></div>
<script type="text/ng-template" id="/todos.html">
<ul>
<li ng-repeat="todo in todos">
<input type="checkbox" ng-model="todo.completed">
<a href="#/{{$index}}">{{ todo.name }}</a>
</li>
</ul>
</script>
<script type="text/javascript">
var app = angular.module('app',['ngRoute']);
app.factory('Todos',function(){
return [
{ name:'Master HTML/CSS/Javascript', completed:true},
{ name:'Learn AngularJS', completed:false},
{ name:'Build NodeJS backend', completed:false},
{ name:'Get started with ExpressJS', completed:false},
{ name:'Setup MongoDB database', completed:false},
{ name:'Be awesome', completed:false},
];
});
app.config(['$routeProvider',function($routeProvider){
$routeProvider
.when('/',{
templateUrl: '/todos.html',
controller: 'TodoController'
});
}]);
app.controller('TodoController' , ['$scope', 'Todos',function($scope,Todos)
{
$scope.todos = Todos;
}]);
</script>
</body>
</body>
</html>
单看代码,似乎看不出什么问题。 这种诡异的报错,有可能是版本的差异引起的。
<script src="http://apps.bdimg.com/libs/angular.js/1.2.6/angular.min.js"></script>
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular-route.min.js"></script>
仔细查看,Angular 和 Angular-route的载入,两个版本为啥不一致呢? 这一点会引起怀疑。
书中,也讲到了 1.2.6 与 1.4.6 的差异。
归根结底,是以下代码引起的:
var app = angular.module('app',['ngRoute']);
Angular 1.2.6 版本不支持以上module的声明方法。
引发的思考
在产品开发时,一定要用Angular稳定的版本,应该说,AngularJS最近发布的 1.8 版本是最稳定的。
那些追求 Angular 5.X 版本的开发者,是不是该刹刹车了呢!
网友评论