前端MV*框架现在有很多,其中某些框架有计算列(又叫监控属性),比如:微软推荐的 Knockout.js 和博客园司徒正美的 avalon.js 框架。

本人只使用过 Knockout.js,avalon.js 没有时间研究,据作者介绍是款集合所有MV*框架优点而打造的一款轻量级MVVM框架。

Avalon.js 实现计算列示例:

之前就有看过 avalon.js 关于计算列属性的一个示例, http://rubylouvre.github.io/mvvm/

输入First Name 或者 Last Name,Full Name时时变化,当你输入Full Name的时候,时时监控并更新 First Name和 Last Name。

avalon的代码如下:

<fieldset ms-controller="simple">
<legend>例子</legend>
<p>First name: <input ms-duplex="firstName" /></p>
<p>Last name: <input ms-duplex="lastName" /></p>
<p>Hello, <input ms-duplex="fullName"></p>
<div>{{firstName +" | "+ lastName }}</div>
<p>nick name: <input ms-duplex="nick.name" /></p>
<p>{{nick.name}}</p>
</fieldset>
avalon.define("simple", function(vm) {
vm.firstName = "司徒"
vm.lastName = "正美"
vm.fullName = {//一个包含set或get的对象会被当成PropertyDescriptor,
set: function(val) {//set, get里面的this不能改成vm
var array = (val || "").split(" ");
this.firstName = array[0] || "";
this.lastName = array[1] || "";
},
get: function() {
return this.firstName + " " + this.lastName;
}
},
vm.nick = {
name: "暗黑之民"
}
});

 

看起来avalon框架还不错,实现计算列的功能代码量比较少。上面这个例子主要的难点应该是输入Full Name时怎样让First Name和Last Name时时变化,虽然这种需求不是特别多,但是可以作为例子讲解。

Angular.js 实现方式:

Angular.js 是没有计算列属性之说的,但是怎样能够实现上述示例的功能呢?

主要思路:监控 First name 和 Last name 当有变化时更新Full name,同时Full name 改变的时候要根据空格切割 Full name更新First name 和Last name,废话不多说,直接上代码示例:

avalon的计算列展现形式更标准化一点,通过 get set来实现对Full Name的监控和设置,Angular.js 却是通过$watch 监控属性(或者函数)达到同样的效果,这也许就是Angular.js作者觉得没有必要加入计算列属性的原因吧(纯属个人猜测)。

本篇文章只是通过 比较的方式来展示下 Angular.js 监控属性的功能!希望能够发散使用Angular的小伙伴的思维方式。

扩散知识:

1. 上述示例是通过监控($watch)函数来达到想要的效果,其实$watch还可以监控数组,如:

$scope.$watch("[firstName,lastName]",function(newValue){
$scope.fullName = (newValue[0] || "") + " " + (newValue[1] || "") },true);

关于$watch的详细介绍参考 官方文档:http://docs.angularjs.org/api/ng.$rootScope.Scope , 英文不好的请看:http://www.angularjs.cn/A0a6

2. 最后分享一个用Knockout.js 做的示例,达到同样的效果,和 avalon.js 使用方式差不多,司徒正美应该也是参考了Knockout的吧,注:只要光标失去焦点才能触发更新

作者:why520crazy 
新浪微博: @why520crazy
出处:http://why520crazy.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
 
 

{{angular.js 使用技巧}} - 实现计算列属性的更多相关文章

  1. {{angular.js 使用技巧}} - 基于验证框架的扩展(w5cValidator)

    开场白: angular.js 是谷歌出的前端js MV*框架,我也是今年做 worktile 的时候才开始接触的,起初技术选型的时候还准备使用 backbone(毕竟很多大公司在使用他,而且也是比较 ...

  2. Angular JS将数据显示为两列(html)

    (数据为Array数组)使用AngularJS中ng-show="{{}}",其将数据按行分为奇数行和偶数行,$even是判断是否为奇数行[如果是则为true,不是则为false] ...

  3. Angular.js vs Ember.js

    Angular.js 拥抱 HTML/CSS Misko Hevery(Angular.js的开发者之一)回答了这一问题,他的主要观点如下: 在HTML中加入太多逻辑不是好做法.Angular.js只 ...

  4. Angular JS学习之指令

    1.Angular JS通过称为指令的新属性来扩展HTML:通过内置的指令来为应用添加功能: 2.AngularJS指令:AngularJS指令是扩展的HTML属性,带有前缀ng-: **ng-app ...

  5. 一探前端开发中的JS调试技巧

    前言 调试技巧,在任何一项技术研发中都可谓是必不可少的技能.掌握各种调试技巧,必定能在工作中起到事半功倍的效果.譬如,快速定位问题.降低故障概率.帮助分析逻辑错误等等.而在互联网前端开发越来越重要的今 ...

  6. 前端开发中的JS调试技巧

    前言:调试技巧,在任何一项技术研发中都可谓是必不可少的技能.掌握各种调试技巧,必定能在工作中起到事半功倍的效果.譬如,快速定位问题.降低故障概率.帮助分析逻辑错误等等.而在互联网前端开发越来越重要的今 ...

  7. 【repost】一探前端开发中的JS调试技巧

    有请提示:文中涉及较多Gif演示动画,移动端请尽量在Wifi环境中阅读 前言:调试技巧,在任何一项技术研发中都可谓是必不可少的技能.掌握各种调试技巧,必定能在工作中起到事半功倍的效果.譬如,快速定位问 ...

  8. 必备的JS调试技巧汇总

    转自http://www.jb51.net/article/88891.htm 前言:任何一个编程者都少不了要去调试代码,不管你是高手还是菜鸟,调试程序都是一项必不可少的工作.一般来说调试程序是在编写 ...

  9. 一探前端开发中的JS调试技巧(转)

    有请提示:文中涉及较多Gif演示动画,移动端请尽量在Wifi环境中阅读 前言:调试技巧,在任何一项技术研发中都可谓是必不可少的技能.掌握各种调试技巧,必定能在工作中起到事半功倍的效果.譬如,快速定位问 ...

随机推荐

  1. 写自己的第二级处理器(3)——Verilog HDL行为语句

    我们会继续上传新书<自己动手写处理器>(未公布),今天是第七章,我每星期试试4 2.6 Verilog HDL行为语句 2.6.1 过程语句 Verilog定义的模块一般包含有过程语句,过 ...

  2. nefu117 素数个数的位数,素数定理

    素数个数的位数 Time Limit 1000ms Memory Limit 65536K description 小明是一个聪明的孩子,对数论有着非常浓烈的兴趣.他发现求1到正整数10n 之间有多少 ...

  3. 问题(bug)确实不在代码逻辑上面,往往是配置、权限或者业务逻辑之外的地方(转)

    不能说所有的bug都是纸老虎,但往往那种看似很奇葩的bug,导致的原因确实很简单,烦了你一段时间,找到真相又让你忍不住一笑.什么是奇葩的bug呢.我的定义是:代码逻辑都一样,但在A处是好的,到了B处就 ...

  4. PL/SQL程序中调用Java代码(转)

    主要是学习PL/SQL调用JAVA的方法. 平台:WINDOWS 1.首先使用IDE写好需要调用的java代码,再添加"create or replace and compile java ...

  5. 一旦rhel5.8造成只读文件系统ORA-00354: corrupt redo log block header

    一旦rhel5.8造成只读文件系统ORA-00354: corrupt redo log block header Wed Jun 03 03:31:24 CST 2015 Thread 1 adva ...

  6. Git 命令速查表

    Git 命令速查表 1.常用的Git命令 命令 简要说明 git add 添加至暂存区 git add-interactive 交互式添加 git apply 应用补丁 git am 应用邮件格式补丁 ...

  7. JavaScript总结一下--创建对象

          在JavaScript象主要就是用下面三种语句: var box=new Object(); 或var box=Object(); var box={};//字面量 function Bo ...

  8. HDU 2048 号码塔(DP)

    号码塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  9. rdlc报告vs2008编辑正常,在vs2012在对错误的编辑

    最近我们的系统开发的工具vs2008升级到2012,由于系统是非常的报告是由rdlc发展.今天 有需要修改的报告满足需求.直接使用vs2012正确rdlc报告编辑,结果本次变动后.报表都报错. 后来我 ...

  10. Android 自己的自动化测试(5)&lt;robotium&gt;

    大约Android自己的自动化测试UI测试,前出台Android 自己主动化測试(4)<uiautomator>, 在android原生的单元測试框架上,利用uiautomator.jar ...