devtools工具

使用devtools工具可以让你更加方便的查看到Vue实例中数据的变化。

chorme商店搜索安装即可。

双向绑定

v-model

双向绑定一般都是与input家族进行绑定。

当表单内容发生改变时,数据层的数据也会发生改变。

<body>

<div id="app">
<input type="text" v-model="v">
</div> <script src="./vue.js"></script>
<script>
const app = new Vue({
el:"#app",
data:{
v:null,
},
})
</script>
</body>

watch监听

使用watch来监听数据的变化。

watch对象中定义函数,函数名与被监听的数据名相同,它具有两个参数,newValue以及oldValue

<body>

<div id="app">
<input type="text" v-model="v">
</div> <script src="./vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
v: null,
},
watch: {
v(newValue, oldValue) {
console.log(`${oldValue}=>${newValue}`);
}
}
})
</script>
</body>

表单操作

input&textarea

双向绑定可直接应用于input以及textarea上。

<body>

<div id="app">
<form action="">
<div>
<label for="username">
<p>用户名</p>
<input type="text" id="username" v-model="username">
</label>
</div>
<p></p>
<div>
<label for="concise">
<p>个人简介</p>
<textarea name="" id="concise" rows="10" cols="30" v-model="concise"></textarea>
</label>
</div>
</form>
</div> <script src="./vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
username: "",
concise: ""
},
})
</script>
</body>

checkbox单选&多选

如下,你必须同意协议,才能执行下一步:

<body>

<div id="app">
<form action="">
<p>我同意协议<input type="checkbox" v-model="status"></p>
<button :disabled="!status">下一步</button>
</form>
</div> <script src='./vue.js'></script>
<script>
"use strict";
const app = new Vue({
el: "#app",
data: {
status: false,
},
});
</script>
</body>

下面是多选的实例,后端返回了一组兴趣爱好,在选择后应该将其id传给后端,使用v-bind绑定id值,使用v-model与传递给后端的choice做绑定:

choice必须是一个Array类型,否则会抛出警告

<body>

<div id="app">
<form action="">
<p v-for="item in hobby">
{{item.name}}<input type="checkbox" v-model="choice" :value="item.id">
</p>
</form>
</div> <script src='./vue.js'></script>
<script>
"use strict";
const app = new Vue({
el: "#app",
data: {
choice: [],
hobby: [
{"id": 1, "name": "篮球"},
{"id": 2, "name": "足球"},
]
},
});
</script>
</body>

radio

使用radio时,只要v-model绑定同一数据源,就会产生互斥效果,不需要再指定额外的name属性。

<body>

<div id="app">
<form action="">
<!-- 使用v-bind,将会是int类型,否则是string -->
男<input type="radio" v-model="gender" :value=1>
女<input type="radio" v-model="gender" :value=2>
</form>
</div> <script src='./vue.js'></script>
<script>
"use strict";
const app = new Vue({
el: "#app",
data: {
gender: 1,
},
});
</script>
</body>

select单选&复选

使用select来选择你喜欢的城市:

如果是select单选,传递给后端的值就是一个int类型。

如果是select复选,传递给后端的值就是一个Array类型。

<body>

<div id="app">
<form action="">
<select name="" v-model="choice" multiple>
<option :value="item.id" v-for="item in city">{{item.name}}</option>
</select>
</form>
</div> <script src='./vue.js'></script>
<script>
"use strict";
const app = new Vue({
el: "#app",
data: {
choice: [],
city: [
{"id": 1, "name": "北京"},
{"id": 2, "name": "上海"},
{"id": 3, "name": "广州"},
],
},
});
</script>
</body>

修饰符

.lazy

使用该修饰符时,绑定的v-model数据源不会实时刷新,而是等到input失去焦点后才会更新。

<body>

<div id="app">
<form action="">
<input type="text" v-model.lazy="userInput">
</form>
</div> <script src='./vue.js'></script>
<script>
"use strict";
const app = new Vue({
el: "#app",
data: {
"userInput": "默认值",
},
});
</script>
</body>

.number

使用该修饰符时,当你输入的内容为纯数字时将会自动转为int类型存储再v-model数据源中。

如果不使用该修饰符,则是String类型。

<body>

<div id="app">
<form action="">
<input type="text" v-model.number="userInput">
</form>
</div> <script src='./vue.js'></script>
<script>
"use strict";
const app = new Vue({
el: "#app",
data: {
"userInput": "默认值",
},
});
</script>
</body>

.trim

使用该修饰符时,将会自动移除v-model数据源两侧的空格。

<body>

<div id="app">
<form action="">
<input type="text" v-model.trim="userInput">
</form>
</div> <script src='./vue.js'></script>
<script>
"use strict";
const app = new Vue({
el: "#app",
data: {
"userInput": "默认值",
},
});
</script>
</body>

实例练习

搭建出一个漂亮的注册页面吧。

<body>
<div id="app"> <div class="container">
<div class="row">
<div class="col-xs-6 col-sm-6 col-md-6 col-lg-6 col-md-offset-2">
<form action="" method="POST" role="form">
<p></p>
<legend class="text-center">欢迎注册</legend>
<div class="form-group">
<label for="username">用户名</label>
<input type="text" class="form-control" id="username" v-model="register.username">
</div>
<div class="form-group">
<label for="age">出生日期</label>
<input type="text" class="form-control" id="age" v-model.number="register.age">
</div>
<div>
<label class="radion-inline" for="male">男
<input type="radio" id="male" value="male" checked="checked" v-model="register.gender">
</label>
<label class="radion-inline" for="female">女
<input type="radio" id="male" value="female" v-model="register.gender">
</label>
</div>
<p></p>
<div class="form-group">
<label for="hobby">兴趣爱好</label>
<select id="hobby" class="form-control" required="required" multiple v-model="register.hobby"> <option value="1">篮球</option>
<option value="2">足球</option>
<option value="3">其他</option>
</select>
</div>
<div class="form-group">
<label for="introduction">个人简介</label>
<textarea id="introduction" cols="30" rows="10" class="form-control"
v-model="register.introduction"></textarea>
</div> <button type="注册" class="btn btn-primary" @click.prevent="post">Submit</button>
</form>
</div>
</div>
</div>
</div>
<script src='./vue.js'></script>
<script>
"use strict";
const app = new Vue({
el: "#app",
data: {
register: {
username: null,
gender: null,
age: null,
hobby: [],
introduction: "",
},
},
methods: {
post() {
console.log(this.register);
}
}
});
</script>
</body>

最新文章

  1. Linux学习之Exam系统发布
  2. 自定义开关ToggleButton的使用
  3. iOS - 果冻效果
  4. angualrjs
  5. 如何查看 oracle 官方文档
  6. 【转】个人对JQuery Proxy()函数的理解
  7. mmap DMA【转】
  8. 2.2孙鑫C++
  9. Centos环境下部署游戏服务器-自动化
  10. 在asp.net mvc中将checkbox传到后台时总是true的解决方法
  11. AJAX异步请求原理和过程
  12. Chrome 控制台不完全指南(转)
  13. ORACLE的监听日志太大,客户端无法连接
  14. springboot定时任务——整合Quartz
  15. Android远程桌面助手(B1391)
  16. 华南理工大学“三七互娱杯”程序设计竞赛(重现赛)( HRY and array 高精度除法模板)
  17. MongoDB 最大连接数 设置失效的异常分析
  18. kubernetes 集群机器重启后磁盘盘符变化
  19. jquery追加元素的不同语法
  20. 环绕声5.1ch

热门文章

  1. 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(7)-Charles苹果手机手机抓包知否知否?
  2. Cesium计算范围(十三)
  3. JZOJ 3469. 【NOIP2013模拟联考7】数列(sequence)
  4. Git基础操作及协作流程
  5. [EULAR文摘] 在总人群中监测ACPA能否预测早期关节炎
  6. 浏览器调试工具devtool
  7. 【C++复习】运算符重载中的特殊运算符
  8. SAP SMARTFORMS World格式白屏
  9. centos7无法下载nginx
  10. 在grafana中使用不同的数据源及插件安装