Vue基础-双向绑定:从 html 到 模板 到 渲染函数
Vue 测试版本:Vue.js v2.5.13
在 Vue 中,可以利用 v-model 语法糖实现数据的双向绑定,例如:
<div id="app">
<input
type="text"
v-model="id"
placeholder="please enter your id"
/>
<p>your id is: {{ id | formatId }}</p>
</div>
window.onload = function() {
Vue.filter('formatId', function(v) {
return v.length < 10 && v.length > 0 ? v.padStart(10, '0') : v;
}); new Vue({
el: '#app',
data: {
id: ''
} });
};
但是有时,我们可能希望用 模板 实现,那么情况就是这样:
<div id="app">
<my-ele :id="id"></my-ele>
</div>
window.onload = function() {
Vue.component('my-ele', {
template: `
<div>
<input type="text" v-model="id"/>
<p>you id: {{id | formatId}}</p>
</div>
`,
props: ['id']
}); Vue.filter('formatId', function(v) {
return v.length < 10 && v.length > 0 ? v.padStart(10, '0') : v;
}); new Vue({
el: '#app',
data: {
id: ''
} });
};
目前为止,都是比较简单的,问题就在于,有时,我们还需要用 render() 函数来实现:
<div id="app">
<my-ele
:val-par="id"
@input-par="id=arguments[0]"
></my-ele>
</div>
window.onload = function() {
Vue.component('my-ele', {
render(createElement) {
let self = this;
let input = createElement('input', {
domProps: {
type: 'text',
placeholder:'please enter your id',
value: this.valPar,
},
on: {
input(e) {
self.$emit('input-par', e.target.value);
}
}
});
let p = createElement('p', {
props: {
id: this.valPar
}
}, 'your id is: '+this.formatId(this.valPar));
return createElement('div', [input, p]);
},
props: ['valPar'],
methods: {
formatId(v) {
return v.length < 10 && v.length > 0 ? v.padStart(10, '0') : v;
}
}
}); new Vue({
el: '#app',
data: {
id: ''
}
});
};
主要注意两点:
- value 的双向绑定在设置在 domProps 而不是 props
- 过滤器自己实现了个,并不能用 Vue.filter
参考文档:
https://cn.vuejs.org/v2/guide/render-function.html#深入-data-对象
Vue基础-双向绑定:从 html 到 模板 到 渲染函数的更多相关文章
- Vue.js双向绑定的实现原理和模板引擎实现原理(##########################################)
Vue.js双向绑定的实现原理 解析 神奇的 Object.defineProperty 这个方法了不起啊..vue.js和avalon.js 都是通过它实现双向绑定的..而且Object.obser ...
- vue的双向绑定原理及实现
前言 使用vue也好有一段时间了,虽然对其双向绑定原理也有了解个大概,但也没好好探究下其原理实现,所以这次特意花了几晚时间查阅资料和阅读相关源码,自己也实现一个简单版vue的双向绑定版本,先上个成果图 ...
- 西安电话面试:谈谈Vue数据双向绑定原理,看看你的回答能打几分
最近我参加了一次来自西安的电话面试(第二轮,技术面),是大厂还是小作坊我在这里按下不表,先来说说这次电面给我留下印象较深的几道面试题,这次先来谈谈Vue的数据双向绑定原理. 情景再现: 当我手机铃声响 ...
- Vue数据双向绑定原理及简单实现
嘿,Goodgirl and GoodBoy,点进来了就看完点个赞再go. Vue这个框架就不简单介绍了,它最大的特性就是数据的双向绑定以及虚拟dom.核心就是用数据来驱动视图层的改变.先看一段代码. ...
- vue数据双向绑定
Vue的双向绑定是通过数据劫持结合发布-订阅者模式实现的,即通过Object.defineProperty监听各个属性的setter,然后通知订阅者属性发生变化,触发相应的回调. 整个过程分为以下几步 ...
- 【学习笔记】剖析MVVM框架,简单实现Vue数据双向绑定
前言: 学习前端也有半年多了,个人的学习欲望还比较强烈,很喜欢那种新知识在自己的演练下一点点实现的过程.最近一直在学vue框架,像网上大佬说的,入门容易深究难.不管是跟着开发文档学还是视频教程,按步骤 ...
- vue数据双向绑定原理
vue的数据双向绑定的小例子: .html <!DOCTYPE html> <html> <head> <meta charset=utf-> < ...
- 揭密 Vue 的双向绑定
Vue 中需要输入什么内容的时候,自然会想到使用 <input v-model="xxx" /> 的方式来实现双向绑定.下面是一个最简单的示例 剖析Vue原理& ...
- vue 之 双向绑定原理
一.实现双向绑定 详细版: 前端MVVM实现双向数据绑定的做法大致有如下三种: 1.发布者-订阅者模式(backbone.js) 思路:使用自定义的data属性在HTML代码中指明绑定.所有绑定起来的 ...
随机推荐
- Python 爬虫 去掉网页注释,去掉网页注释
在爬虫中,我们遇到了网页注释的问题,这些内容,第一,耗费内存资源,第二,在解析网页的时候,不易匹配出来信息.那么我们该如何去掉他们呢??? 我们可以去使用正则去过滤掉他们 方法如下 result = ...
- Informix 語法
1.修改表名稱 RENAME TABLE old_table_name TO new_table_name; 2.分頁 select SKIP 0 FIRST 1 * from tablename ...
- Eclipse发布安卓APK包无图标的解决方法
算是一个Bug,清空项目都不行. 解决方法是卸载掉项目,重新导入.
- Hadoop在线分析处理(OLAP)
数据处理与联机分析处理 ( OLAP ) 联机分析处理是那些为了支持商业智能,报表和数据挖掘与探索等业务而开展的工作.这类工作的样例有零售商按地区和季度两个维度计算门店销售额,银行按语言和月份两个维度 ...
- linux 密码破解
(一)Linux 系统密码破解 1.在grub选项菜单按E进入编辑模式 2.编辑kernel那行 /init 1 (或/single) 3.按B重启 4.进入后执行下列命令 root@#passwd ...
- Windows Phone Unit Test 环境搭建
单元测试对工程质量带来的作用就不详细说明了,本文只讨论如何在WP开发环境下搭建测试工程 历史 从WP7时代官方是不支持UnitTest工程的,因此需要采用WPToolkitTest这个工程来实 ...
- java ssm框架入门(二)添加语言滤器
使用过滤器是在web.xml中使用filter,以下是码过滤器,过滤所有资源的使用 web.xml <filter> <filter-name>setCharactor< ...
- postgresql data数据目录路径迁移
默认的数据库路径是/var/lib/pgsql/9.x/data 将现有的数据库文件全部拷贝到新的数据库路径下,然后重启 新建一个路径作为新的数据库数据路径,假如是/home/data sudo mk ...
- MySQL线程池总结
线程池是Mysql5.6的一个核心功能,对于服务器应用而言,无论是web应用服务还是DB服务,高并发请求始终是一个绕不开的话题.当有大量请求并发访问时,一定伴随着资源的不断创建和释放,导致资源利用率低 ...
- 2015 Multi-University Training Contest 5 1009 MZL's Border
MZL's Border Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5351 Mean: 给出一个类似斐波那契数列的字符串序列 ...