angular与avalon对复杂对象的修改
angular的实现
<!doctype html>
<html ng-app>
<head>
<script src="http://files.cnblogs.com/rubylouvre/angular.js"></script>
<script>
var a
function TodoCtrl($scope) {
$scope.aaa = {
bbb: {
ccc: "cccc"
}
}
a = $scope
}
setTimeout(function() {
a.aaa.bbb = {
ccc: "angular"
}
alert("不会立即改变")
a.$digest()//这个不能漏
}, 2000)
</script>
</head>
<body>
<div ng-controller="TodoCtrl">
{{aaa.bbb.ccc}}
</div>
</body>
</html>
运行代码
avalon的实现
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>avalon</title>
<script src="http://files.cnblogs.com/rubylouvre/avalon20130929.js" type="text/javascript"></script>
<script>
var a = avalon.define("xxx", function(vm) {
vm.aaa = {
bbb: {
ccc: "cccc"
}
}
})
setTimeout(function() {
a.aaa.bbb = {
ccc: "avalon"
}
}, 2000)
</script>
</head>
<body ms-controller="xxx">
{{aaa.bbb.ccc}}
</body>
</html>
运行代码
从调用来看,angular由于不能直接使用setTimeout,需要hack一下,并且它并不够智能,需要你$digest。说明它本身没有对子对象的监控,只有用户手动$digest,它才匆匆忙忙把自己修改一遍,然后通知视图更新。
avalon则是一开始就把用户传来的东西改造一遍,它身上每一个毛孔(除非你将它设置为不可监控的)都转为监控属性,计算属性与监控数组,当数据发生改动时就立即调用视图刷新属性。对于这种深层套嵌的对象,如果是中间的对象发生变化,这准确来说被替换了,这个新的子对象也立即被改造,并且涉及它的那个元素会重新打回原形,重新被扫描,被绑定。
angular与avalon对复杂对象的修改的更多相关文章
- sql server 查看对象最后修改时间
sql server 查看对象最后修改时间,根据最后修改时间排序 存储过程 SELECT * FROM sys.all_objects WHERE TYPE='P' ORDER BY modify_ ...
- jquery实现点击展开列表同时隐藏其他列表 js 对象操作 对象原型操作 把一个对象A赋值给另一个对象B 并且对象B 修改 不会影响 A对象
这篇文章主要介绍了jquery实现点击展开列表同时隐藏其他列表的方法,涉及jquery鼠标事件及节点的遍历与属性操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了jquery实现点击 ...
- Angular: 执行ng lint后如何快速修改错误
当我第一次被分配到“修正执行ng lint语句后的错误”这项任务前,我就被导师提前告知这是一个很无聊的任务,当我开始后,我发现其实有一些办法可以加快这个无聊单调的工作.接下来,我就分享一下我的经验. ...
- java 记录对象前后修改的内容(工具类)
有时候业务需要,需记录一条记录的修改历史,但是不能为完成任务而硬编码,不靠谱 这种情况可以使用java反射来完成 对对象属性的描述可以通过自定义注解来完成,读取里面的属性进而记录修改历史. 在对象的属 ...
- js 对象操作 对象原型操作 把一个对象A赋值给另一个对象B 并且对象B 修改 不会影响 A对象
我最近在做一个vue + element-UI + vue-resource + vuex项目的时候,遇到了一个对象的问题. 当我们在项目需要 复制一个对象到另一个对象并且 被复制的对象不能受复制后 ...
- 微信小程序中如何使用setData --- 修改数组对象、修改对象
看代码吧~ 这是修改对象 this.setData({ allStageIndex: e.detail.value, [`projectDetailsData.stage`]: this.data.a ...
- Angular的Observable可观察对象(转)
原文:https://blog.csdn.net/qq_34414916/article/details/85194098 Observable 在开始讲服务之前,我们先来看一下一个新东西——Obse ...
- vue A对象赋值给B对象,修改B属性会影响到A问题
实际在vue中 this.A = this.B,没有进行深层赋值,只是把this.A的地址指向了与this.B相同的地址,所有对于A的修改会影响到B. 解决相互影响的思路是在this.A必须是新建的 ...
- Angular JS - 4 - Angular JS 作用域与控制器对象
1. 控制器对象使用 <!DOCTYPE html> <html> <head lang="en"> <meta charset=&quo ...
随机推荐
- LeetCode OJ:Reverse Linked List (反转链表)
Reverse a singly linked list. 做II之前应该先来做1的,这个倒是很简单,基本上不用考虑什么,简单的链表反转而已: /** * Definition for singly- ...
- ElasticSearch安装及简单配置说明
目录 1. 准备安装包... 1 2. 安装jdk7. 1 3. 安装ElasticSearch. 2 4. 安装maven. 3 5. 集成IK ...
- Python基础学习(第1天)
写这篇随笔,是看Vamei大大写的Python快速教程的学习笔记,以此自勉,链接:http://www.cnblogs.com/vamei/archive/2012/09/13/2682778.htm ...
- 详解scrapy
>> (1) 基本概念 >> (2) 爬虫与反爬 >> (3) 基本概念 >> (4) 基本概念
- 移植 MIUI Framework
移植MIUI Framework 原文:http://www.miui.com/thread-409543-1-1.html 1. 为什么使用代码插桩 首先我们来回顾第一章中的Android软件架构图 ...
- 1 秒杀系统模拟基础实现,使用DB实现
本文根据动脑学院的一节类似的课程,改编实现.分别使用DB和redis来完成. 隔离的解释 业务隔离:将秒杀业务独立出来,尽量不与其他业务关联,以减少对其他业务的依赖性.譬如秒杀业务只保留用户id,商品 ...
- HAWQ取代传统数仓实践(八)——维度表技术之角色扮演维度
单个物理维度可以被事实表多次引用,每个引用连接逻辑上存在差异的角色维度.例如,事实表可以有多个日期,每个日期通过外键引用不同的日期维度,原则上每个外键表示不同的日期维度视图,这样引用具有不同的含义.这 ...
- spring 和springmvc 在 web.xml中的配置
(1)问题:如何在Web项目中配置Spring的IoC容器? 答:如果需要在Web项目中使用Spring的IoC容器,可以在Web项目配置文件web.xml中做出如下配置: <!-- Sprin ...
- HWOJ-求字符串最后一个单词的长度
题目:给定一个字符串,求最后一个单词的长度,每个单词中间有空格. 例如:输入:hello world 输出:5 C代码:通过. #include <stdio.h> #define m ...
- 剑指offer-第三章高质量代码(反转链表)
题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转链表的头节点. 思路:对一个链表反转需要三个指针操作来保证链表在反转的过程中保证不断链,给链表一个行动指针pNode,对pNode指向的节 ...