Vue 测试版本:Vue.js v2.5.13

在 Vue 中,可以利用 v-model 语法糖实现数据的双向绑定,例如:

  1. <div id="app">
  2. <input
  3. type="text"
  4. v-model="id"
  5. placeholder="please enter your id"
  6. />
  7. <p>your id is: {{ id | formatId }}</p>
  8. </div>
  1. window.onload = function() {
  2. Vue.filter('formatId', function(v) {
  3. return v.length < 10 && v.length > 0 ? v.padStart(10, '0') : v;
  4. });
  5.  
  6. new Vue({
  7. el: '#app',
  8. data: {
  9. id: ''
  10. }
  11.  
  12. });
  13. };

但是有时,我们可能希望用 模板 实现,那么情况就是这样:

  1. <div id="app">
  2. <my-ele :id="id"></my-ele>
  3. </div>
  1. window.onload = function() {
  2. Vue.component('my-ele', {
  3. template: `
  4. <div>
  5. <input type="text" v-model="id"/>
  6. <p>you id: {{id | formatId}}</p>
  7. </div>
  8. `,
  9. props: ['id']
  10. });
  11.  
  12. Vue.filter('formatId', function(v) {
  13. return v.length < 10 && v.length > 0 ? v.padStart(10, '0') : v;
  14. });
  15.  
  16. new Vue({
  17. el: '#app',
  18. data: {
  19. id: ''
  20. }
  21.  
  22. });
  23. };

目前为止,都是比较简单的,问题就在于,有时,我们还需要用 render() 函数来实现:

  1. <div id="app">
  2. <my-ele
  3. :val-par="id"
  4. @input-par="id=arguments[0]"
  5. ></my-ele>
  6. </div>
  1. window.onload = function() {
  2. Vue.component('my-ele', {
  3. render(createElement) {
  4. let self = this;
  5. let input = createElement('input', {
  6. domProps: {
  7. type: 'text',
  8. placeholder:'please enter your id',
  9. value: this.valPar,
  10. },
  11. on: {
  12. input(e) {
  13. self.$emit('input-par', e.target.value);
  14. }
  15. }
  16. });
  17. let p = createElement('p', {
  18. props: {
  19. id: this.valPar
  20. }
  21. }, 'your id is: '+this.formatId(this.valPar));
  22. return createElement('div', [input, p]);
  23. },
  24. props: ['valPar'],
  25. methods: {
  26. formatId(v) {
  27. return v.length < 10 && v.length > 0 ? v.padStart(10, '0') : v;
  28. }
  29. }
  30. });
  31.  
  32. new Vue({
  33. el: '#app',
  34. data: {
  35. id: ''
  36. }
  37. });
  38. };

主要注意两点:

  1. value 的双向绑定在设置在 domProps 而不是 props
  2. 过滤器自己实现了个,并不能用 Vue.filter

参考文档:

https://cn.vuejs.org/v2/guide/render-function.html#深入-data-对象

Vue基础-双向绑定:从 html 到 模板 到 渲染函数的更多相关文章

  1. Vue.js双向绑定的实现原理和模板引擎实现原理(##########################################)

    Vue.js双向绑定的实现原理 解析 神奇的 Object.defineProperty 这个方法了不起啊..vue.js和avalon.js 都是通过它实现双向绑定的..而且Object.obser ...

  2. vue的双向绑定原理及实现

    前言 使用vue也好有一段时间了,虽然对其双向绑定原理也有了解个大概,但也没好好探究下其原理实现,所以这次特意花了几晚时间查阅资料和阅读相关源码,自己也实现一个简单版vue的双向绑定版本,先上个成果图 ...

  3. 西安电话面试:谈谈Vue数据双向绑定原理,看看你的回答能打几分

    最近我参加了一次来自西安的电话面试(第二轮,技术面),是大厂还是小作坊我在这里按下不表,先来说说这次电面给我留下印象较深的几道面试题,这次先来谈谈Vue的数据双向绑定原理. 情景再现: 当我手机铃声响 ...

  4. Vue数据双向绑定原理及简单实现

    嘿,Goodgirl and GoodBoy,点进来了就看完点个赞再go. Vue这个框架就不简单介绍了,它最大的特性就是数据的双向绑定以及虚拟dom.核心就是用数据来驱动视图层的改变.先看一段代码. ...

  5. vue数据双向绑定

    Vue的双向绑定是通过数据劫持结合发布-订阅者模式实现的,即通过Object.defineProperty监听各个属性的setter,然后通知订阅者属性发生变化,触发相应的回调. 整个过程分为以下几步 ...

  6. 【学习笔记】剖析MVVM框架,简单实现Vue数据双向绑定

    前言: 学习前端也有半年多了,个人的学习欲望还比较强烈,很喜欢那种新知识在自己的演练下一点点实现的过程.最近一直在学vue框架,像网上大佬说的,入门容易深究难.不管是跟着开发文档学还是视频教程,按步骤 ...

  7. vue数据双向绑定原理

    vue的数据双向绑定的小例子: .html <!DOCTYPE html> <html> <head> <meta charset=utf-> < ...

  8. 揭密 Vue 的双向绑定

    Vue 中需要输入什么内容的时候,自然会想到使用 <input v-model="xxx" /> 的方式来实现双向绑定.下面是一个最简单的示例 剖析Vue原理& ...

  9. vue 之 双向绑定原理

    一.实现双向绑定 详细版: 前端MVVM实现双向数据绑定的做法大致有如下三种: 1.发布者-订阅者模式(backbone.js) 思路:使用自定义的data属性在HTML代码中指明绑定.所有绑定起来的 ...

随机推荐

  1. 02、Windows Phone 套接字(Socket)实战之服务器端设计

    这里主要写 PC 服务器端的逻辑,UI 使用的是 WPF,因为 WPF 比普通的 WinForm 的流式布局 更容易控制,而且比 WinForm 美观一些,显示截图: 一.页面 UI MainWind ...

  2. java学习之局部变量以及全局变量

    全局变量 什么是全局变量? 全局变量就好比一个容器或者一个公用的东西一样,就类似外面公共场所的凳子一样,大家都可以使用这个凳子. 和他相反的局部变量是啥子东东呢? 局部变量就是局部的东西,如果全局变量 ...

  3. 裸的lcs

    最长公共子串,裸的复杂度N^2 #include<bits/stdc++.h> using namespace std; ][]; int main() { ]; ]; scanf(&qu ...

  4. IIS 与 Apache共存

    http://support.microsoft.com/kb/813368 http://www.blueidea.com/computer/system/2006/3585.asp 操作其实也很简 ...

  5. js中的target与currentTarget的区别<转>

    关于js中target与currentTarget的区别的关键在于他们所处在的事件流的阶段是不一样的,target处于事件流的目标阶段,currentTarget处理事件流的捕获.处于目标阶段和冒泡阶 ...

  6. mysql 存储过程调用

    CALL  存储过程名('参数值1',‘参数值2',’参数值3')

  7. 三种CSS方法实现loadingh点点点的效果

    我们在提交数据的时候,在开始提交数据与数据提交成功之间会有一段时间间隔,为了有更好的用户体验,我们可以在这个时间段添加一个那处点点点的动画,如下图所示: 汇总了一下实现这种效果主要有三种方法: 第一种 ...

  8. 查看win10的激活信息和版本号

    在命令提示符里输入 cscript /nologo %Windir%\System32\slmgr.vbs /dli&&cscript /nologo %Windir%\System3 ...

  9. SSIS 自测题-控制流控件类

    说明:以下是自己的理解答案,不是标准的答案,如有不妥烦请指出.         有些题目暂时没有答案,有知道的请留言,互相学习,一起进步. 62.描述一下 Execute SQL Task 的作用,在 ...

  10. Differential Geometry之第八章常Gauss曲率曲面

    第八章.常Gauss曲率曲面 1.常正Gauss曲率曲面 2.常负Gauss曲率曲面与Sine-Gordon方程 3.Hilbert定理 4.Backlund变换 4.1.线汇与焦曲面 4.2.Bac ...