通过jQuery的比较来认识AngularJS

这一章主要是通过几个例子分别通过jQuery和AngularJS来达到效果。主要通过思维转换来进一步了解AngularJS框架设计背后的思想。

注意: 1.为了不浪费界面时间,界面用到了bootstrap. 2.所有代码写在一个文件中,方便大家复制粘贴. 3.引入css和angularJS文件使用的是百度静态库,如果没有网络环境请自行下载引用依赖文件. 4.如果觉得看比较jquery和angularJS没有兴趣的,可以直接跳过,阅读下一章TodoList,这个列子是一步一步带大家完成熟悉angularJS编码思想

首先来看一个简单例子,大家可以直接复制粘贴代码,查看效果

用户输入

1.输入框输入值 2.下面h1标签马上有显示

下面是jquery代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>输入测试</title>
<link rel="stylesheet" href="http://apps.bdimg.com/libs/bootstrap/3.1.1/css/bootstrap.css">
</head>
<body>
<form>
<div class="form-group">
<label for="inputName" class="col-sm-2 control-label">名字:</label>
<div class="col-sm-10">
<input type="text" id="inputName" class="form-control" placeholder="请输入你的名字">
</div>
</div>
<div class="col-sm-10 col-sm-offset-2">
<h1 id="myText"></h1>
</div>
</form>
</body>
<script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
$(function(){
$('#inputName').on('keyup',function(){
$('#myText').html($(this).val());
});
});
</script>
</html>

下面来看一下angularJS的代码

<!DOCTYPE html>
<html lang="en" ng-app>
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" href="http://apps.bdimg.com/libs/bootstrap/3.1.1/css/bootstrap.css">
</head>
<body>
<form>
<div class="form-group">
<label for="inputName" class="col-sm-2 control-label">名字:</label>
<div class="col-sm-10">
<input type="text" class="form-control" placeholder="请输入你的名字" ng-model="inputName">
</div>
</div>
<div class="col-sm-10 col-sm-offset-2">
<h1></h1>
</div>
</form>
</body>
<script src="http://apps.bdimg.com/libs/angular.js/1.2.9/angular.min.js"></script>
</html>

通过这个简单例子可以很清楚的看到,angularJS都没有写任何的JS代码就实现了这个输入效果。这里可以简单总结 1.jquery是通过操作DOM来达到实现目的,换句话说,也就是必须要有了页面,再根据页面来进行相应的编程 2.angularJS主要关心的却是数据

购物车

注意上面两点理论,我们来看一下稍微复杂点的例子,做一个简单的购物车.依据angularJS主要关心的是数据的这个特点,我们首先来编写angularJS相关代码,具体效果如下:

<!DOCTYPE html>
<html lang="en" ng-app="myApp">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" href="http://apps.bdimg.com/libs/bootstrap/3.1.1/css/bootstrap.css">
</head>
<body>
<div ng-controller="CartController" class="panel panel-primary">
<div class="panel-heading text-center"><h3>你的购物车</h1></div>
<div class="panle-body"></div>
<table class="table table-bordered table-hover">
<tr ng-repeat="item in items">
<td class="text-center"><span ng-bind="item.title"></span></td>
<td class="text-center">
<input type="text" ng-model="item.quantity" class="form-control">
</td>
<td class="text-center"><span></span></td>
<td class="text-center"><span></span></td>
<td>
<button type="button" class="btn btn-primary" ng-click="del($index)">
删除
</button>
</td>
</tr>
<tr>
<td colspan="4" class="text-center">总计</td>
<td></td>
</tr>
</table>
</div>
</body>
<script src="http://apps.bdimg.com/libs/angular.js/1.2.9/angular.min.js"></script>
<script>
var myApp = angular.module('myApp', []);
myApp.controller('CartController', ['$scope', function($scope){
$scope.items = [
{title:'方便面',quantity:8,price:2.5},
{title:'可乐',quantity:18,price:3},
{title:'口香糖',quantity:12,price:4},
{title:'辣条',quantity:30,price:0.5}
];
$scope.total =total();
$scope.del = function(index){
$scope.items.splice(index,1);
$scope.total = total();
}
function total(){
var total = 0;
$scope.items.forEach(function(item){
total += item.quantity * item.price;
});
return total;
}
}]);
</script>
</html>

来分析一下上面的代码:

var myApp = angular.module('myApp', []);

这一段创建了一个angularJS模块,关于什么是模块,为什么要用,大家可以参考我的javascript模式–模块模式这篇文章,介绍了JS模块模式的基础,当然AngularJS是遵循 AMD 的,大家有一个大概了解什么是模块就行了。

大家注意看HTML代码中最上面有这么一段:

<html lang="en" ng-app="myApp">

这里和myApp相对应,简单来说就是申明整个页面在angularJS包裹的环境中,其他大家不用深究。

 myApp.controller('CartController', ['$scope', function($scope){}]);

通过myApp模块创建了一个控制器,一个页面只能有一个模块,但是可以有多个控制器。简单来说模块申明页面上哪些元素被包裹在了angularJS的环境中,而控制器则是这个环境中一个个的小块,js代码和界面被申明了ng-controller="CartController"的元素相对应。就表示页面和js代码共享了作用域。$scope相当于在控制器范围内的this,当然上面的代码为什么感觉那么怪,是由于angularJS用到了依赖注入的方式,这一点对于完全没有后端开发的同学来说理解有点痛苦,可以完全不用理会他现在,就当作是代码声明的一种方式就行了。对于我们快速入门来说。掌握这一点就差不多了。

<tr ng-repeat="item in items">

这一句代码就是在循环迭代items数组中的数据,数组中有几组数据,那么tr就会被循环几次

上面是基本说明,在函数里里面的代码,大家可以清楚的看到,我们就是声明了一个对象数组,无论是删除,计算都是直接对数据的操作,没有涉及任何的DOM操作。所以也就意味着界面基本上无需我们关心。在控制器中只需要关心数据和操作数据,而界面就会出现相应的变化

如果这段代码要放入到jQuery里面去写…就是根据数组数据去创建DOM都比较麻烦,大家看一下代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" href="http://apps.bdimg.com/libs/bootstrap/3.1.1/css/bootstrap.css">
</head>
<body>
<div class="panel panel-primary" id="cart">
<div class="panel-heading text-center"><h3>你的购物车</h1></div>
<div class="panle-body"></div>
<table class="table table-bordered table-hover"> <tr id="total">
<td colspan="4" class="text-center">总计</td>
<td></td>
</tr>
</table>
</div>
</body>
<script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
$(function(){
var items = [
{title:'方便面',quantity:8,price:2.5},
{title:'可乐',quantity:18,price:3},
{title:'口香糖',quantity:12,price:4},
{title:'辣条',quantity:30,price:0.5}
]; $(items).each(function(index,element){
var tr = $("<tr>"
+"<td class=\"text-center\"><span>"+element.title+"</span></td>"
+"<td class=\"text-center\">"
+"<input type=\"text\" class=\"form-control\" value='"+element.quantity+"'>"
+"</td>"
+"<td class=\"text-center\">¥<span>"+element.price+"</span></td>"
+"<td class=\"text-center\">¥<span class=\"subTotal\">"+(element.quantity*element.price)+"</span></td>"
+"<td>"
+"<button type=\"button\" class=\"btn btn-primary\" >删除"
+"</button>"
+"</td>"
+"</tr>");
$(tr).insertBefore($('#total')); });
function getTotal(){
var sum = 0;
$('#cart span.subTotal').each(function(){
sum += parseFloat($(this).html());
});
$('#total td:last').html('¥' + sum);
} $('#cart button.btn').click(function(){
$(this).parent().parent().remove();
getTotal();
}) $('#cart input[type=text]').keyup(function(e){
$(this).parent().nextAll(':eq(1)').find('span').html(parseInt($(this).val()) * parseFloat($(this).parent().next().find('span').html()));
getTotal();
}); getTotal();
});
</script>
</html>

通过jQuery的比较来认识AngularJS的更多相关文章

  1. 从jquery里的$.ajax()到angularjs的$http

    jquery中对ajax的使用做了很多封装,使得我们使用习惯了,反而并不大清楚在请求过程中的一些细节. 在第一次使用angularjs的$http时,后台一直接受不到前端请求的数据,于是小小研究了一下 ...

  2. 两强相争,鹿死谁手 — JQuery中的Ajax与AngularJS中的$http

    一.JQuery与AngularJS 首先,先简单的了解一下JQuery与AngularJS.从源头上来说,两者都属于原生JS所封装成的库,两种为平行关系. 二.Ajax请求与数据遍历打印 这里是Aj ...

  3. 会jQuery,该如何用AngularJS编程思想?

    我可以熟练使用jQuery进行客户端应用的开发,但是现在我希望开始使用Angular.js.哪位能描述一下这个过程中必要的模式变化吗?希望您的答案能够围绕下面这些具体的问题: 1. 我如何对客户端we ...

  4. 具备 jQuery 经验的人如何学习AngularJS(附:学习路径)

    这是一个来自stackoverflow的问答,三哥直接把最佳回答搬过来了. 都说AngularJS的学习曲线异常诡异~~~ Q: “Thinking in AngularJS” if I have a ...

  5. (十六)JQuery Ready和angularJS controller的运行顺序问题

    项目中使用了JQuery和AngularJS框架,近期定位一个问题,原因就是JQuery Ready写在了angularJS controller之前,导致JQuery选择器无法选中须要的元素(由于a ...

  6. AngularJS中的$http.post与jQuery.post的区别

    原文:http://my.oschina.net/tommyfok/blog/287748 很多时候我们需要用ajax提交post数据,angularjs与jq类似,也有封装好的post. 但是jQu ...

  7. 媲美jQuery的JS框架----AngularJS(二)

    前言 对于AngularJS什么,小编在这就不多做介绍了.大家可以看小编的上一篇博客. 言归正传,小编在上一篇博客中介绍了AngularJS中的指令.表达式还有非常实用的三种服务.接下来,带大家看一看 ...

  8. 对比jQuery和AngularJS的不同思维模式

    jQuery是dom驱动,AngularJS是数据驱动,这里有一篇文章阐述的非常好,建议看看 本文来自StackOverFlow上How do I “think in AngularJS” if I ...

  9. jQuery开发者眼中的AngularJS

    文章来源:http://blog.jobbole.com/76265/ AngualrJS是一个很贴心的web应用框架.它有很不错的官方文档和示例:经过在现实环境中的测试著名的TodoMVC proj ...

随机推荐

  1. atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性

    atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性   1.1. Servlet和JSP规范版本对应关系:1 1.2. Servlet2 ...

  2. webapp启动流程

    webapp启动流程 看了这个教程,其实所有的webapp大致都是这个流程了.

  3. China Mobile 免流原理

    用户添加包头之类(SSR软件),最后连接上了Server. 这个过程因为修改了数据包(混淆)以及服务器使用移动IP. 服务器得到信息后通过计费系统漏洞137 138端口等再返回给用户. 整个过程最重要 ...

  4. WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping。

    WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping.请添加一个名为 jquery (区分大小写)的 ScriptRes ...

  5. 使用Google产品以来遇到的最糟糕、最霸道、最让人抓狂的设计

    很久没有登录cnblogs@gmail.com这个邮箱,今天通过gmail.com登录了一下,登录后出现一个对话框要求设置性别与出生日期,而且必须要设置,不设置不让登录. 这个邮箱是我们网站用的是邮箱 ...

  6. Visual C++ 6.0使用教程

    Visual C++它大概可以分成三个主要的部分: 3. Platform SDK.这才是Visual C++和整个Visual Studio的精华和灵魂,虽然我们很少能直接接触到它.大致说来,Pla ...

  7. Anliven - 如何逼疯你的小伙伴

    如果你也曾为某人某事"发疯发狂,懵逼连连". . 无礼:随意牵扯他人,不了解实际情况,却对他人工作横加点评甚至是指责. 无知:自我感觉良好,自己总是最正确最合理的,除了自己,没人会 ...

  8. Adaptive Placeholder – 自适应的占位符效果

    在早期,我们都是通过使用 JavaScript 来实现占位符功能.而现在,HTML5 原生提供的 placeholder 属性让我们在现代浏览器轻松就能实现这样的功能.这里向大家分享一个自适应的占位符 ...

  9. 解决AndroidADT自带Eclipse编辑器不能自动代码提示的问题。

    今天发现,我下载的AndroidADT开发套装中自带的Eclipse没有自动代码提示功能.通过参考http://blog.csdn.net/coolszy/article/details/724195 ...

  10. Linux 小工具学习之(1)——Wget十例[翻译]

    在本博文中我们将学习一下wget这个工具.wget可以使用HTTP.HTTPS.和FTP等常见网络协议来从万维网(WWW)获取文件(从它的名字来源也可以看出 World Wide Web Get -& ...