今天所学习的东西虽然不是很多 但是对我来说受益匪浅, 就比如说在table中要选中一行的话我们可以这样写:

模板中:

<table ng-controller="tableController" >
<tr ng-repeat="child in ary" ng-class="{select:$index==selectedRow}" ng-click="clickTheRow($index)">
<td>{{child.name}}</td>
<td>{{child.sex}}</td>
</tr>
</table>

ng-repeat的意思是,对于ary数组中的每一个元素,都把tr中的dom结构复制一份(包括tr自身);

ng-class我们可以用对象的形式{select:$index==selectedRow}的意思是当¥index==selectedRow的时候值为true否则为false就没有select的class,ngclick的方法类似于js中的click方法点击执行操作修改¥scope中的属性:

app.controller('tableController', function($scope){
$scope.ary = [{'name':'小名','sex':'boy'},
{'name':'lucy','sex':'girl'},
{'name':'tom','sex':'boy'}];
$scope.clickTheRow = function(row){
$scope.selectedRow = row;
}
})

当select:ture时 为tr加上该class 然后添加相应样式,从而实现类似选择一行的效果。

下面我们来做个购物车的例子:

<div ng-controller="shoppingController">
<div ng-repeat="item in items">
<span>{{item.title}}</span>
<input type="text" ng-model="item.quantity">
<span>{{item.price | currency}}</span>
<span>{{item.price * item.quantity | currency}}</span>
</div>
<div>Total:{{totalCart() | currency}}</div>
<div>Discount:{{bill.discount | currency}}</div>
<div>Subtotal:{{subtotal() | currency}}</div>
<!-- <div>Total:{{bill.totalCart | currency}}</div>
<div>Discount:{{bill.discount | currency}}</div>
<div>Subtotal:{{bill.subtotal | currency}}</div> --> <input type="text" ng-model="msg">{{msg | titleCase:msg}}
</div>
app.controller('shoppingController',function($scope){
$scope.bill = {};
$scope.msg = "hah jia you ni shi";
$scope.items = [
{'title':'Paint pots','quantity':8,'price':3.95},
{'title':'Polka dots','quantity':17,'price':12.95},
{'title':'Pabbles ','quantity':5,'price':6.95},
];
//第一种
$scope.totalCart = function(){
var total = 0;
for (var i = 0; i < $scope.items.length; i++) {
total+=$scope.items[i].quantity*$scope.items[i].price;
}
return total;
}
$scope.subtotal = function(){
return $scope.totalCart() - $scope.bill.discount;
}
function calculateDiscount(newValue,oldValue,scope){
$scope.bill.discount = newValue > 100 ? 10 : 0;
}
$scope.$watch($scope.totalCart,calculateDiscount);

这个其实很简单就是为totalCart添加了监听事件,从而实现相应的变化,写法二:

$scope.$watch(function(){
var total = 0;
for (var i = 0; i < $scope.items.length; i++) {
total+=$scope.items[i].quantity*$scope.items[i].price;
}
$scope.bill.totalCart = total;
$scope.bill.discount = total>100?10:0;
$scope.bill.subtotal = total - $scope.bill.discount;
})

这是一种相对简单的写法,这个是检测¥scope数据模型的变化,如果有变化立刻执行相应函数。

下面补充下¥watch的解释:

¥watch(watchFn,watchAction,deepWatch)

watchFn该参数是一个带有angular的表达式或者函数的字符串,他会返回被监控的数据模型的当前值,这个表达式将会被执行很多次,所以你要保证他不会保证其他副作用,也就是说要保证他可以被调用很多次也不会改变状态,给予同样的原因,监控表达式应该很容易被计算出来。如果你使用字符串传递了一个angular表达式,那么他将会针对调用它的那个作用域中的对象而执行。

watchAction这是一个函数或者表达式,当watchFn发生变化时会被调用,如果是函数的形式他将会接收到watchFn新旧两个值,以及作用域对象的引用其函数签名为function(newValue,oldValue,scope)。

deepWatch如果设置为ture,这个可选的bool型参数将会命令angular去检查被监控对象的每个属性是否发生了变化,如果你想要监控数组中的元素,或者对象上的所有属性,而不只是监控一个简单的值你就可以使用这个参数,由于angular需要便利数组或者对象,如果集合比较大那么运算负担就会比较重。

¥watch函数会返回一个函数,当你不在需要接收变更通知时,可以用这个返回的函数注销监控器。具体写法如下:

var dereg = $scope.$watch('someModel.someProperty',callbackOnChange());

dereg();

angularjs之双向绑定的更多相关文章

  1. AngularJS数据双向绑定

    <body ng-app> <div ng-controller="myCtrl"> <input ng-model="abc" ...

  2. Angularjs 数据双向绑定

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  3. way.js - 轻量级、持久化的双向绑定JS库

    AngularJS的双向绑定一直为人称道,但使用AngularJS需要对页面组件化,学习成本还是很高的. 本文源自 https://github.com/gwendall/way.js 边学边译. 使 ...

  4. Angularjs 双向绑定机制解析

    文章转自:http://www.2cto.com/kf/201408/327594.html AngularJs 的元素与模型双向绑定依赖于循环检测它们之间的值,这种做法叫做脏检测,这几天研究了一下其 ...

  5. Angular系列----AngularJS入门教程05:双向绑定(转载)

    在这一步你会增加一个让用户控制手机列表显示顺序的特性.动态排序可以这样实现,添加一个新的模型属性,把它和迭代器集成起来,然后让数据绑定完成剩下的事情. 请重置工作目录: git checkout -f ...

  6. AngularJS中数据双向绑定(two-way data-binding)

    1.切换工作目录 git checkout step-4 #切换分支,切换到第4步 npm start #启动项目 2.代码 app/index.html Search: <input ng-m ...

  7. angularjs bind与model配合双向绑定 表达式方法输出

    <!doctype html><html lang="en"><head> <meta charset="UTF-8" ...

  8. AngularJS学习笔记(三)数据双向绑定

    双向绑定 双向绑定是AngularJS最实用的功能,它节省了大量的代码,使我们专注于数据和视图,不用浪费大量的代码在Dom监听.数据同步上,关于双向更新,可看下图: 下面,我们通过代码来实现.先不要纠 ...

  9. AngularJS双向绑定,手动实施观察

    实现这样的一个需求:页面中某个地方显示某个文本框的值经过计算得到的结果,而且是文本框值每次变化显示的计算结果也跟着动态变化. 在controller中可以声明一个对象,它的一个字段用来存储初始值: $ ...

随机推荐

  1. “The SQL Server license agreenment cannot be located for the selected edition.”MSSQL安装问题

    今天老邹又来吐槽了.今天不和IE7较劲了.说点别的吧. 我呢什么软件都喜欢装最新版的,这部刚出来windows 8.1就赶紧装上了,随后就用上了vs2013.前天看到新闻说微软已经发布了sql ser ...

  2. 利用FTP将Linux文件备份到Windows

    windows:Windows Server 2008 linux: CentOS release 5.5 (Final)       首先在windows上安装好FTP,本人使用的是Windows ...

  3. ajax+FormData+javascript 实现无刷新上传附件

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  4. 由浅入深完全掌握Ajax

    n年前,如果不知道 XML,您就是一只无人重视的丑小鸭.十八个月前,Ruby 成了关注的中心,不知道 Ruby 的程序员只能坐冷板凳了.今天,如果想跟上最新的技术时尚,那您的目标就是 Ajax. 但是 ...

  5. Canvas前端游戏开发——FlappyBird详解

    一直想自己做点小东西,直到最近看了本<HTML5游戏开发>,才了解游戏开发中的一点点入门知识. 本篇就针对学习的几个样例,自己动手实践,做了个FlappyBird,源码共享在度盘;也可以参 ...

  6. php的setcookie()函数详解

    一.浏览器COOKIE原理: 浏览器在访问某个域名时会先读取本地的COOKIE文件(CHROME浏览器在C:\Users\Administrator\AppData\Local\Google\Chro ...

  7. PrintStream打印流

    package file; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; impo ...

  8. C++是怎么实现多态性的

    C++是怎么实现多态性的,C++中多态实现的原理, 当一个类中有虚函数时,系统会为该类构造一个虚函数表vtable,他是一个指针数组,存放每个虚函数的入口地址,编译器还会在此类中隐含插入一个指针vpt ...

  9. HP Webinspect 10 访问wap的url

    HP Webinspect是著名的扫描工具,这里讲一下怎么使用它扫wap的url. 通俗的讲,Wap是手机网页浏览器使用的网页,web是电脑网页浏览器使用的网页.(讲得不专业,但方便理解) 在手机上显 ...

  10. DUBBO安装配置注意事项

    DUBBO安装配置注意事项 参考URL:http://blog.csdn.net/lichunan/article/details/40349645 ====== 管理端: 记得更改TOMCAT的端口 ...