vue系列--【动态样式、表单数据绑定、表单修饰符、事件处理、$set】

1.bootstrap安装

官网:http://bootcss.com
下载:
	npm i bootstrap

2.动态样式

动态类名

 <!--1. :class="变量" -->
<div :class="classn">建设社会</div>

<div :class="[三元]">
  
</div>

<div :class="{类名1:true|false,类名2:true|false}">
  
</div>


动态行间样式

 <div id="app">
        <!-- 行间样式 特殊情况使用 -->
        <div style="color:red;">外防输入,内防反弹</div>
        <!-- :style="json" -->
        <div :style="{'color':'red',background:'yellow'}">唧唧复唧唧</div>

        <ul>
            <li v-for="item in d" :key="item.id" :style="{background:item.color}">
                <h3>{{item.title}}</h3>
                <div>{{item.con}}</div>
            </li>
        </ul>
    </div>

3.表单数据绑定

数据绑定

1.做表单数据交互的时候,前端最好定一个json,json的key和后端要求的字段保持一致,这样,后期传参的时候会更方便

2.输入框

<div>姓名:<input type="text" v-model="user.name"></div>
<div>年龄:<input type="number" v-model="user.age"> </div>

3.单选框

<!-- 对于单选框需要给input设置value,value是选中的值 -->
<div>性别:
  <input type="radio" name="sex" value="0" v-model="user.sex">男
  <input type="radio" name="sex" value="1" v-model="user.sex">女
</div>

4.下拉菜单

<!-- 对于下拉菜单单选,option中间的是给用户看的,option的value是选中的值 -->
<!-- <div>职业:
  <select v-model="user.job">
  <option value="">--请选择--</option>
  <option value="1">php工程师</option>
  <option value="2">web工程师</option>
</select>
</div> -->
<div>职业:
  <select v-model="user.job">
    <option value="" disabled>--请选择--</option>
    <option  v-for="item in jobs" :value="item.id" :key="item.id">{{item.name}}</option>
  </select>
</div>
<!-- 对于下拉菜单多选的时候,初始值需要是数组。 -->
<div>零食:
  <select v-model="user.lingshi" multiple>
    <option value="">--请选择--</option>
    <option v-for="item in lingshis" :key="item.id" :value="item.id">{{item.name}}</option>
  </select>
</div>

5.多选框

<!-- 对于多选框来说,如果初始值是[],那么最后的结果就是[];如果初始值不是数组,那结果就是boolean -->
<div>
  <!-- value对应的值如果想要的是number,需要加上v-bind  -->
  爱好:
  <input type="checkbox" :value="1" v-model="user.hobby">看电视
  <input type="checkbox" :value="2" v-model="user.hobby">打游戏
  <input type="checkbox" value="3" v-model="user.hobby">写代码
  <input type="checkbox" value="4" v-model="user.hobby">唱歌
</div>
<div>
  <!-- 对于多选框来说,默认,勾上就是true,不勾就是false -->
  <input type="checkbox" v-model="user.isAgree">同意协议{{user.isAgree}}
</div>

表单修饰符

<div id="app">
  <!-- 指令.修饰符 -->
  <!-- .lazy 输入框失去光标,才修改模型数据 -->
  <input type="text" v-model.lazy="name">
  <div>{{name}}</div>

  <!-- type="number" 最后得到的数据还是string -->
  <!-- .number 将得到的数据转为number类型 -->
  <input type="number" v-model.number="age">
  <button v-on:click="submitAge()">提交年龄</button>

  <!-- .trim 去除空格 -->
  <input type="text" v-model.trim="name">
</div>

表单事件

单选框、多选框、下拉菜单如果要绑定事件,都是change,不要使用click.

4.事件处理

1.如何绑定事件?
<div id="app">
  <!-- 1.通过v-on:事件名="方法" -->
  <button v-on:click="fn()">点击弹个1</button>

  <!-- 2.v-on 可以简写为@ -->
  <button @click="fn()">点击弹个1</button>

  <!-- 3.如果没有参数,() 可以省略 -->
  <button @click="fn">弹个1</button>

  <!-- 4.如果逻辑只有1句话,可以直接在html中书写 -->
  <h3>{{name}}</h3>
  <button @click="name='王昭君'">王昭君</button>

  <h3>{{arr}}</h3>
  <button @click="arr=[]">全部删除</button>
</div>
2.如何传参?
3.事件对象 event
<div id="app">
        <!-- 如果参数除了event还有其他参数,只能才有显示传参;如果参数只有event,都行 -->

        <!-- 显示传参:$event 获取event对象 -->
        <button @click="getEvent($event)">点击获取event-1</button>

        <!-- 隐式传参,注意:不写() -->
        <button @click="getEvent">点击获取event-2</button>

        <button @click="getEvent($event,3)">e,3</button>
        
    </div>
    <script>
        new Vue({
            el:"#app",
            data:{},
            methods:{
                getEvent(e){
                    console.log(e);
                },
                getEvent2(e,n){
                    console.log(e,n);
                }
            }
        })
      
    </script>
4.阻止默认事件 阻止事件传播
// 阻止默认
e.preventDefault() 

// 阻止传播
e.stopPropagation()
5.事件修饰符
-prevent 阻止默认事件
.stop 阻止事件传播
.self 触发的目标元素是自己才执行
.once 一次性事件绑定
.capture 实现事件捕获
.left 左键
.right 右键
.up 上键
.down 下键
.enter 回车
.13 键码

5.$set

json

如果定义data的数据时没有某个字段,后面添加的字段,改变,页面不会渲染。

// 1.this.$set(json,key,value)
 this.$set(this.json,"sex","男")

// 2.Vue.set(json,key,value)
Vue.set(this.json,"sex","男")

数组

后端返回了数据,但是前端自己添加了某个字段,该字段改变,页面不会渲染。

// 1.取出要修改的数据
let obj=this.arr[index];
// 2.做修改
obj.sex="男"
// 3.放回去
// this.$set(this.arr,index,obj)
// Vue.set(this.arr,index,obj)
this.arr.splice(index,1,obj)

调用下面方法,视图都会更新:

push()
pop()
shift()
unshift()
splice()
sort()
reverse()
原文地址:https://www.cnblogs.com/chenhaiyun/p/14757046.html