绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
Vue过滤案例、按键修饰符、数据双向绑定 _
2023-02-16 16:14:40

Vue过滤案例、按键修饰符、数据双向绑定

一、v-for能循环的类型

  1. 数组、带索引
  2. 对象、默认value值、也可以是key值
  3. 字符串、带索引
  4. 数字、带索引

二、js的几种循环方式

  1. js的循环基于索引的循环
  2. js的in循环拿到的是索引
  3. es6语法 of循环
  4. 数组的方法 forEach循环
  5. jQuery的循环 循环数组、对象

三、key值的解释

之前我们用v-for放在标签上,其实标签上还可以放key,但是key值必须是,不然就程序报错,用属性指令绑定一个变量,key的值每次都不一样,这样可以加速虚拟DOM的替换。想要专业一些那就尽量写这个方式

vue
<div v-for="item in 8" :key="item">{{item}}</div>

四、数组、对象的检测与更新

对象,新增一个key-value,发现页面没有变化,以后设置下即可。

python
Vue.set(this.info,"hobby’,'篮球') 

五、input的几个事件

属性名称中文名称解释用法
click点击事件点击按钮时触发
input输入事件输入内容时触发
change改变事件发生变化时触发
blur失去焦点失去焦点时触发
focus聚焦事件焦点聚焦时触发

六、事件修饰符

事件修饰符解释含义
.stop只处理自己的阻止事件冒泡
.self只处理自己的不处理子事件
.prevent阻止a链接的跳转
.once事件只触发一次(适用于抽奖页面)

七、按键修饰符

类似于键盘映射,按了键盘的那个键就会触发其对应的函数并执行下面介绍一下具体用法



箭头函数写法演变过程

python
定义函数
@keyup="handleKeyUp"
按键修饰符
@keyup.enter # 可以是键盘对应的英文单词
@keyup.13 # 或数字对应关系也是可以的

# keycode对照表链接
https://www.cnblogs.com/guochaoxxl/p/16753266.html

八、表单控制

  1. radio 单选
  2. checkbox 单选和多选

九、过滤案例

html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/Vue.js"></script>
</head>
<body>
<div id="aaa">
    <h1>filter example</h1>
    <p>pls enter sth: <input type="text" v-model="myText" @input="handleInput"></p>
    <ul>
        <li v-for="item in newDataList">{{item}}</li>
    </ul>
</div>
</body>
<script>
    var vm = new Vue({
        el:'#aaa',
        data:{
            myText:'',
            dataList:['a','an','any','be','beyond','cs','css'],
            newDataList:['a','an','any','be','beyond','cs','css'],
        },
        methods:{
            handleInput(){
                this.newDataList = this.dataList.filter(
                    item => item.indexOf(this.myText) >=
                )
            },
        },
    })
</script>
</html>

十、购物车案例

html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/Vue.js"></script>
    <!-- 新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="https://cdn.bootcss.com/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
<div id="app">
    <h1 class="text-center ">SHOPPING CAR LIST</h1>
    <div>
        <div class="row">
            <div class="col-lg-4"></div>
            <div class="col-lg-4">
                <table class="table table-hover" @click="clickToSum">
                    <thead>
                    <tr>
                        <th>goods</th>
                        <th>price</th>
                        <th>quantity</th>
                        <th>select</th>
                        <th>
                        </th>
                    </tr>
                    </thead>
                    <tbody>
                    <tr v-for="(shopping, index) in shoppingList" :key="index">
                        <th>{{shopping.name}}</th>
                        <th>{{shopping.price}}</th>
                        <th><input type="number" v-model="shopping.num" width="10px"></th>
                        <th><input type="checkbox" v-model="selectList" :value="index"></th>
                    </tr>
                    </tbody>
                </table>

                <p>
                    <span>total:{{summary}}RMB</span>
                </p>
            </div>
            <div class="col-lg-4"></div>
        </div>
    </div>
</div>
</body>
<script>
    var vm = new Vue({
        el: '#app',
        data: {
            allSelect: false,
            selectList: [],
            shoppingList: [
                {id: 1, name: 'iPhone', price: 13000, num: 2},
                {id: 2, name: 'iPad', price: 10000, num: 2},
                {id: 3, name: 'laptop', price: 15000, num: 2},
            ],
            summary: 
        },
        methods: {
            clickToSum() {
                setTimeout(this.getSum, 10)
            },
            getSum() {
                var total = 
                for (index of this.selectList) {
                    let shopping = this.shoppingList[index]
                    total += shopping.price * shopping.num
                }
                this.summary = total
            },
        },
    })
</script>
</html>

分享好友

分享这个小栈给你的朋友们,一起进步吧。

趣谈前端
创建时间:2020-07-15 17:32:01
一个重度代码洁癖者,有对前端生态的总结,思考和探索。内容涵盖了笔者多年对vue,react,node,webpack以及javascript框架设计的探索和经验。公众号 - 趣谈前端
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • xujiang
    栈主

小栈成员

查看更多
  • ?
  • victoria_ltt
  • asdjlk1
  • LCR_
戳我,来吐槽~