分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

Vue-双向绑定:从 html 到 模板 到 渲染函数

发布时间:2023-09-06 01:44责任编辑:苏小强关键词:暂无标签

在 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: ‘‘ ???????} ???});};

主要注意两点:

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

参考文档:

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

Vue-双向绑定:从 html 到 模板 到 渲染函数

原文地址:https://www.cnblogs.com/xianshenglu/p/8485789.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved