前言
本次探索的demo是基于jquery写的,毕竟jquery提供了强大的选择器,用惯了就离不开它了!angular的双向绑定实在是有点精深,本次探索只实现了文本的双向绑定。

View-Model
先看效果:文本框输入内容,model层数据也同步过来了
Model-View
先看效果:js改变model层数据,视图也立即随之变化
上我的demo
<!DOCTYPE html>
<html lang="en" data-swq-app = 'app'>
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="./js/jquery-1.9.1.min.js"></script>
</head>
<body>
<input type="text" data-swq-model="name">
<input type="text" data-swq-model="age">
<div>name:<span data-swq-bind="name"></span></div>
<div>age:<span data-swq-bind="age"></span></div>
<script>
(function(window){
//模仿angular的双向绑定
//需要一个发布者,也就是angular里面的$scope的存在,这里我取我的大名swq,是个对象
//需要订阅者数据容器
var swqArray = []; //订阅者数据容器
var swqNamesArray = ['name','age']; //存放订阅者标识容器,这边写死,实际上肯定需要动态获取
window.swq ={
scanTag : function (){
var swqController = $('[data-swq-app]:first');
// view层需要和model层绑定的元素进行事件绑定
var allModelView = swqController.find('[data-swq-model]');
allModelView.each(function(){
$(this).on('keyup',function(event){
var targetBind = $(this).data('swqModel');
var value = $(this).val();
if(targetBind && targetBind.length > 0){
swq[targetBind] = value;
}
});
});
// model层需要劫持绑定的进行绑定
$.each(swqNamesArray,function(index,value){
notifyProperty(value);
})
}
};
//数据的变化需要反映到视图上,因此要监听到数据的变化,js原生的defineProperty给我们提供了监听的可能,劫持更改数据,思路有点类似前端路由的实现思路,我监听到你某个操作但是我不做你的功能,我自己定义该做的事
function notifyProperty(name){
Object.defineProperty(swq,name,{
//劫持到set方法
set : function(newValue){
swqArray[name] = newValue;
// 实现model-view的同步
var $target = $('[data-swq-bind = "'+name+'"],[data-swq-model = "'+name+'"]');
if($target){
$target.each(function(){
var tagName = $(this)[0].tagName.toLowerCase();
if(tagName == 'input' || tagName =='select' || tagName =='textarea'){
$(this).val(newValue)
}else{
$(this).text(newValue)
}
})
}
},
//劫持到get方法,因为get方法已经被劫持,所以比如我们劫持了swq.name,那么swq.name就没有值了,所以我们给它返回值,返回值是存在订阅者数据容器里面的
get : function(){
return swqArray[name];
}
});
}
})(window);
swq.scanTag();//初始化,进行双向绑定
// 尚未实现的功能 ;
// 1.动态获取需要进行双向绑定的name
// 2.只实现了text文本的绑定,对象的绑定需要递归
// 3.脏查询机制还未实现,就是我们某些js后增加的需要双向绑定的name,没办法进行双向绑定了
// 4.angular双花括号解析表达式未实现<br>// 5.感觉还差得远,哪位大神看到有成熟的demo记得给链接!!!
</script>
</body>
</html>
demo解读
核心其实就是js原生的defineProperty。在这之前,我们需要知道,我们在给某个对象添加和获取属性和方法时其实它底层是调用了set和get方法,比如obj.name="名字",这里是调用了set方法,obj.name这里是调用了get方法。
因此,我们可以劫持js的这两个底层方法
Object.defineProperty(obj,attribute,{set:function(newVlaue){//dosomething},get:function(){//dosomething}})
obj是我们的model对象,attribute就是我们要劫持的需要双向绑定的name,set就是设置属性时底层调用的方法,get就是获取属性时底层调用的方法因为我们劫持了这两个底层方法,我们可以做我们想做的事,但是同时我们也破坏了它本身的设置和获取功能,因此我这里是把订阅者的数据都是存在一个数组里面的,我还声明了一个数组用来保存所有需要进行双向绑定的name,比较low的是我这边是写死的,实际情况下肯定是要动态获取所有需要双向绑定的name的
结言
本人小菜对前端技术很感兴趣,有大神路过给点指点,我也可以关注下各位大神的博客,希望可以学到更多的东西!!!谢谢
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# angular
# 双向绑定
# 理解Angular数据双向绑定
# 深入学习AngularJS中数据的双向绑定机制
# Angular2实现自定义双向绑定属性
# Angular JS数据的双向绑定详解及实例
# AngularJS学习笔记(三)数据双向绑定的简单实例
# AngularJS入门教程之双向绑定详解
# 浅谈AngularJs 双向绑定原理(数据绑定机制)
# 绑定
# 大神
# 我们可以
# 这两个
# 递归
# 先看
# 返回值
# 的是
# 都是
# 实现了
# 我也
# 是个
# 我还
# 在这
# 给我们
# 感兴趣
# 没办法
# 到你
# 还未
# 不做
相关文章:
如何将凡科建站内容保存为本地文件?
历史网站制作软件,华为如何找回被删除的网站?
兔展官网 在线制作,怎样制作微信请帖?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
C++中引用和指针有什么区别?(代码说明)
如何通过二级域名建站提升品牌影响力?
太原网站制作公司有哪些,网约车营运证查询官网?
免费网站制作appp,免费制作app哪个平台好?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
内部网站制作流程,如何建立公司内部网站?
智能起名网站制作软件有哪些,制作logo的软件?
如何选择高效稳定的ISP建站解决方案?
小程序网站制作需要准备什么资料,如何制作小程序?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
用v-html解决Vue.js渲染中html标签不被解析的问题
如何通过西部建站助手安装IIS服务器?
武清网站制作公司,天津武清个人营业执照注销查询系统网站?
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
如何通过WDCP绑定主域名及创建子域名站点?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
建站之星伪静态规则如何设置?
西安大型网站制作公司,西安招聘网站最好的是哪个?
代购小票制作网站有哪些,购物小票的简要说明?
如何访问已购建站主机并解决登录问题?
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
如何在景安服务器上快速搭建个人网站?
如何零基础在云服务器搭建WordPress站点?
建站之家VIP精选网站模板与SEO优化教程整合指南
Python文件管理规范_工程实践说明【指导】
非常酷的网站设计制作软件,酷培ai教育官方网站?
建站之星如何配置系统实现高效建站?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
建站之星如何助力企业快速打造五合一网站?
北京网站制作的公司有哪些,北京白云观官方网站?
建站主机服务器选型指南与性能优化方案解析
Swift中switch语句区间和元组模式匹配
如何选择适配移动端的WAP自助建站平台?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
盘锦网站制作公司,盘锦大洼有多少5G网站?
网页设计网站制作软件,microsoft office哪个可以创建网页?
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
网站代码制作软件有哪些,如何生成自己网站的代码?
建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略
宿州网站制作公司兴策,安徽省低保查询网站?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
XML的“混合内容”是什么 怎么用DTD或XSD定义
网站制作知乎推荐,想做自己的网站用什么工具比较好?
如何在Windows 2008云服务器安全搭建网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。