v-model、Handling Forms

vue.js的一大功能便是实现数据的双向绑定,本文就表单处理时运用v-model指令实现双向绑定做一个介绍:

v-model这个指令只能用在 <input> ,  <select> , <textarea>这些表单元素上,所谓双向绑定,指的就是我们在js中的vue实例中的data与其渲染的dom元素上的内容保持一致,两者无论谁被改变,另一方也会相应的更新为相同的数据。这是通过设置属性访问器实现的。例如:

var data = {
	name: "erik",
	getName: function() {
		return this.name;
	},
	setName: function(name) {
		this.name = name;
	}
};

上面的代码中我们通过 getName() 和 setName() 方法作为访问器,我们可以进一步严格限制(如借助Object.defineProperty方法)不直接访问name这个属性,所有对 data.name 的读写都必须通过 data.getName() 和 data.setName() 方法。此时我们改写访问器方法,添加对属性值改变得到监控,便可以实现数据的双向绑定。

那么在表单处理中我们具体如何使用v-model呢,先看看官方文档给出的例子:

<form id="demo">
  <!-- text -->
  <p>
    <input type="text" v-model="msg">
    {{msg}}
  </p>
  <!-- checkbox -->
  <p>
    <input type="checkbox" v-model="checked">
    {{checked ? "yes" : "no"}}
  </p>
  <!-- radio buttons -->
  <p>
    <input type="radio" name="picked" value="one" v-model="picked">
    <input type="radio" name="picked" value="two" v-model="picked">
    {{picked}}
  </p>
  <!-- select -->
  <p>
    <select v-model="selected">
      <option>one</option>
      <option>two</option>
    </select>
    {{selected}}
  </p>
  <!-- multiple select -->
  <p>
    <select v-model="multiSelect" multiple>
      <option>one</option>
      <option>two</option>
      <option>three</option>
    </select>
    {{multiSelect}}
  </p>
  <p><pre>data: {{$data | json 2}}</pre></p>
</form>

对应的js:

new Vue({
  el: ‘#demo‘,
  data: {
    msg      : ‘hi!‘,
    checked  : true,
    picked   : ‘one‘,
    selected : ‘two‘,
    multiSelect: [‘one‘, ‘three‘]
  }
})

效果如下:

小伙伴们可以尝试一下写出这个页面,在浏览器中当你调整上面表单元素的选中值时,你会发现下面打印的vue实例内容也会随之改变,而如果你在代码中改变vue实例data内容时渲染出来的表单选中值也会随之改变。

另外,v-model这个指令还有几个可选的参数:lazy,number,options,debounce 

1.使用lazy参数是将双向数据同步的时间节点从input触发改为了change触发,调用方式如下:

<!-- synced after "change" instead of "input" -->
<input v-model="msg" lazy>

2.使用number参数是通知v-model绑定的dom元素把用户输入值默认当成数字来处理,调用如下:

<input v-model="age" number>

3.使用options参数是用于渲染一个select项的列表,调用方式如下:

<select v-model="selected" options="myOptions"></select>

其中options的参数名指向一个数组,该数组可以包括字符串或对象,对象可以是{text:‘‘, value:‘‘}的形式,指定了<option>的value属性与text内容,例如:

[
  { text: ‘A‘, value: ‘a‘ },
  { text: ‘B‘, value: ‘b‘ }
]

将渲染出:

<select>
  <option value="a">A</option>
  <option value="b">B</option>
</select>

如果对象是{ label:‘‘, options:[...] }的形式,则可以渲染出多个option组<optgroup>,如下例:

[
  { label: ‘A‘, options: [‘a‘, ‘b‘]},
  { label: ‘B‘, options: [‘c‘, ‘d‘]}
]

将渲染出:

<select>
  <optgroup label="A">
    <option value="a">a</option>
    <option value="b">b</option>
  </optgroup>
  <optgroup label="B">
    <option value="c">c</option>
    <option value="d">d</option>
  </optgroup>
</select>

4.使用debounce参数是指定一个延迟时间,延迟从按键触发到数据更新同步之间的时间,当我们的更新操作比较耗时时这个属性十分有用,例如搜索引擎在我们键入字符时发送ajax请求完成自动补全提示,调用如下:

<input v-model="msg" debounce="500">
时间: 2024-08-18 01:44:00

v-model、Handling Forms的相关文章

VUE.JS学习笔记(v-model、Handling Forms)

vue.js的一大功能便是实现数据的双向绑定,本文就表单处理时运用v-model指令实现双向绑定做一个介绍: v-model这个指令只能用在<input>, <select>,<textarea>这些表单元素上,所谓双向绑定,指的就是我们在js中的vue实例中的data与其渲染的dom元素上的内容保持一致,两者无论谁被改变,另一方也会相应的更新为相同的数据.这是通过设置属性访问器实现的.例如: var data = { name: "erik", g

Model、Form、ModelForm

本节内容: 1:Model 2:Form 3:Model 1 2 3 http://www.cnblogs.com/wupeiqi/articles/6144178.html  武sir:Form组件 http://www.cnblogs.com/wupeiqi/articles/6216618.html  武sir:Model http://www.cnblogs.com/wupeiqi/articles/6229414.html  武sir:ModelForm Model ==> 强大的数据

我是这样一步步理解--主题模型(Topic Model)、LDA(案例代码)

1. LDA模型是什么 LDA可以分为以下5个步骤: 一个函数:gamma函数. 四个分布:二项分布.多项分布.beta分布.Dirichlet分布. 一个概念和一个理念:共轭先验和贝叶斯框架. 两个模型:pLSA.LDA. 一个采样:Gibbs采样 关于LDA有两种含义,一种是线性判别分析(Linear Discriminant Analysis),一种是概率主题模型:隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA),本文讲后者. 按照wiki上的介绍,L

ASP.NET MVC轻教程 Step By Step 4——Model、View和Controller

ASP.NET MVC中的Model(数据模型)主要包括定义数据结构.数据库读写.数据验证等等和对象处理相关的工作. 在解决方案资源管理器中找到Model文件夹,点击右键,添加一个新类,名为“Message”.包含三个属性:NickName(用户名).Content(内容).ReleaseDate(发布日期). public class Message { public string NickName { set; get; } public string Content { set; get;

利刃 MVVMLight 2:Model、View、ViewModel结构以及全局视图模型注入器的说明

上一篇我们已经介绍了如何使用NuGet把MVVMLight应用到我们的WPF项目中.这篇我们来了解下一个基本的MVVMLight框架所必须的结构和运行模式. MVVMLight安装之后,我们可以看到简易的框架布局,如上篇,生成了一个ViewModel文件夹,ViewModel层的内容都放在这边,除了Main对象的ViewModel之外,还包含一个ViewModelLocator文件, 用来注入当前的ViewModel全局实例. 一.先来说说分层结构: 如图: 1.View负责前端展示,与View

SpringMVC(二)--处理数据模型、ModelAndView、Model、Map、重定向、@ModelAttribute、

1.处理模型数据 Spring MVC 提供了以下几种途径输出模型数据: – ModelAndView:处理方法返回值类型为 ModelAndView 时, 方法体即可通过该对象添加模型数据 – Map 及 Model.ModelMap: 入参为 org.springframework.ui.Model.org.springframework.ui. ModelMap 或 java.uti.Map 时,处理方法返回时,Map 中的数据会自动添加到模型中. 无论返回值是String类型,还是Mod

Mybatis-Generator自动生成Dao、Model、Mapping等相关映射文件(懒人版)

今天在学习mybatis生成相关的映射文件的时候,发现了往期的生成Dao.Model.Mapping等文章多数都是一样的,我也在学着重复造轮子,不过是懒人造的.本文旨在解决开发过程,简化配置文件的"手写". 废话不多说,show me the code! 步骤一:新建普通maven工程,pom.xml文件配置如下: 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http

Model、ModelMap、ModelAndView的作用及区别

Model.ModelMap.ModelAndView的作用及区别 对于MVC框架,控制器controller执行业务逻辑 用于产生模型数据Model 视图view用来渲染模型数据 Model和ModelAndView这两个类在spring的视图解析时作用及区别 1.Model是用来传输数据的,不会进行业务的寻址 2.ModelAndView可以进行业务寻址(就是设置对应的要请求的静态文件,静态文件类似于jsp文件) 最大的区别:Model每一次请求可以自动创建,ModelAndView是需要我

Asp.Net Core 入门(四)—— Model、View、Controller

和我们学习Asp.Net MVC一样,Asp.Net Core MVC的Model.View.Controller也和我们熟悉的Asp.Net MVC中的相似.不同的是我们在使用Asp.Net Core MVC的时候需要注入MVC. Asp.Net Core MVC注入 MVC 的方法有两种,一种是AddMvcCore(),它只是注入了MVC的一些核心的东西,不包括像返回的ViewResult.JsonResult等,如果要使用完整的MVC,需要使用另一种注入方式 AddMvc() 进行注入,A