zoukankan      html  css  js  c++  java
  • 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()
    
  • 相关阅读:
    Unity3D使用OpenFileDialog后崩溃
    JS定时器
    如果把我剥得一文不名丢在沙漠的中央,只要一行驼队经过———我就可以重建整个商业帝国
    软件开发架构
    C#对象序列化与反序列化
    我的作品们
    fread 不能读取最后一个数据块
    for循环中的i++和++i
    MOS管不能关断的原因!!!
    AD16 快速原理图封装导出
  • 原文地址:https://www.cnblogs.com/chenhaiyun/p/14757046.html
Copyright © 2011-2022 走看看