美文网首页WEB全栈技术我爱编程
AngularJS 调试技巧——版本差异到底有多大?

AngularJS 调试技巧——版本差异到底有多大?

作者: 全栈开发之道 | 来源:发表于2018-03-15 22:15 被阅读55次

背景

有读者反馈,按照书《 全栈开发之道:MongoDB+Express+AngularJS+Node.js 》第9章调试程序,出现诡异的报错,如下:

image.png

看到这种错误,晕倒,直接在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 版本的开发者,是不是该刹刹车了呢!

相关文章

网友评论

    本文标题:AngularJS 调试技巧——版本差异到底有多大?

    本文链接:https://www.haomeiwen.com/subject/ksekqftx.html