Vue基础第二篇

这篇具有很好参考价值的文章主要介绍了Vue基础第二篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、事件指令

1.vm对象

总结:

1 写在data或method中的属性或方法,从vm中直接可以 . 出来
2 methods的函数中,如果想使用data或methods中的属性,直接this.名字  就可以了

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
</head>
<body>
<div id="app">
    <h1>{{name}}</h1>
    <button @click="handleClick">点我</button>


</div>
</body>


<script>
    // 1 写在data或method中的属性或方法,从vm中直接可以 . 出来
    // 2 methods的函数中,如果想使用data或methods中的属性,直接this.名字  就可以了
    let vm = new Vue({
        el: '#app',
        data: {
            name: 'lqz',
            age: 19
        },
        methods: {
            handleClick() {
                console.log(this)
                this.handleClick1()
                
            },
             handleClick1() {
                console.log(this)
                this.name='彭于晏'
                
            },
        }
    })


</script>
</html>

2.函数传参

总结:

1  v-on:事件名='函数'-----》简写成  @事件名='函数'
2 触发函数,可以传参数

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
</head>
<body>
<div id="app">
    <h1>函数,可以多传参数,也可也少传参数,都不会报错</h1>
    <button @click="handleClick('lqz')">点我</button>
    <h1>事件对象,调用函数,不传参数,会把当前事件对象,传入,可以不接受,也可以接受</h1>
    <button @click="handleClick2">点我2</button>
    <br>
    <button @click="handleClick3('lqz',$event)">点我3</button>

</div>
</body>


<script>
    let vm = new Vue({
        el: '#app',
        data: {},
        methods: {
            handleClick(name, age) {
                console.log(name, age)
            },
            handleClick2(event) {
                console.log(event)
            },
            handleClick3(name, event) {
                console.log(name)
                console.log(event)
            }
        }
    })


</script>
</html>

二、属性指令

标签上   name   id  class  src  href ,height  属性
如果这样,name='xx' 就写死了,我们想动态的绑定变量,变量变化,属性的值也变化

v-bind:属性名='变量'
简写成: :属性名='变量'

属性指令使用举例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
</head>
<body>
<div id="app">
    <button @click="handleClick">点我换美女</button>
    <br>
    <img v-bind:src="url" alt="">

</div>
</body>


<script>
    let vm = new Vue({
        el: '#app',
        data: {
            url:'https://img2.woyaogexing.com/2023/06/01/11de6aa55c3ccc0fc35ba1ab6e4ae2b5.jpg'
        },
        methods:{
            handleClick(){
                this.url='https://img2.woyaogexing.com/2023/06/01/3e47999d1ad937577828591cdd3c0433.jpg'
                
            }
        }
    })


</script>
</html>

案例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
</head>
<body>
<div id="app">
    <button @click="handleStart">点我开始选</button>
    <hr>
    <img :src="url" alt="" @click="handleStop">


</div>
</body>


<script>
    let vm = new Vue({
        el: '#app',
        data: {
            url: 'https://img2.woyaogexing.com/2023/06/01/11de6aa55c3ccc0fc35ba1ab6e4ae2b5.jpg',
            // 图片 数组,放了很多图片
            img_list: [
                'http://pic.imeitou.com/uploads/allimg/230530/10-2305301A538.jpg',
                'http://pic.imeitou.com/uploads/allimg/230530/10-2305301A539.jpg',
                'http://pic.imeitou.com/uploads/allimg/230530/10-2305301A540.jpg',
                'http://pic.imeitou.com/uploads/allimg/230530/10-2305301A540-50.jpg',
                'http://pic.imeitou.com/uploads/allimg/230530/10-2305301A541.jpg',
                'http://pic.imeitou.com/uploads/allimg/230530/10-2305301A541-50.jpg',
                'http://pic.imeitou.com/uploads/allimg/230530/10-2305301A542.jpg',
                'http://pic.imeitou.com/uploads/allimg/230530/10-2305301A544-50.jpg',
                'http://pic.imeitou.com/uploads/allimg/230530/10-2305301A549.jpg'

            ],
            t: null


        },
        methods: {
            handleStart() {
                //定时器---》每隔 某个事件 做一件事
                var _this = this
                this.t = setInterval(function () {
                    // url 随机从列表中取值,赋值给url
                    // Math.random() 生成0--1之间的小数
                    //this.img_list.length: 列表长度
                    // Math.floor 向下取整
                    // 能返回一个数组大小以内的数字()
                    var res = Math.floor((Math.random() * _this.img_list.length))
                    _this.url = _this.img_list[res]
                    console.log(_this.url)


                }, 1000)
            },
            handleStop() {
                // 停止定时器
                clearInterval(this.t)
                this.t = null
            }
        }
    })


</script>
</html>

2.style和class

style 和 class 也是属性,可以使用属性指令  :class=   :style=  

但是使用方法很特殊

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
    <style>
        .size {
            font-size: 60px;
        }

        .red {
            background-color: red;
        }

        .yellow {
            background-color: yellow;
        }
    </style>
</head>
<body>
<div id="app">
    <h1>class 的使用:字符串,数组,对象</h1>
    <button @click="handleClick">点我变样式</button>
    <br>
    <div :class="class_obj">
        我是div
    </div>

    <h1>style 的使用:字符串,数组,对象</h1>
    <br>
    <!--    <div style="font-size: 80px;background-color: green">-->
    <div :style="style_obj">
        我是div
    </div>

</div>
</body>


<script>
    let vm = new Vue({
        el: '#app',
        data: {
            // class 推荐使用 数组方式
            // class 绑定的变量,类型可以是 字符串,数组,对象
            // class_str: 'size',  // vm.class_str='size red'
            // class_arr: ['red'],  // 给该变量,追加值,class变化,页面会发生变化:vm.class_arr.push('size')
            // class_obj: {size: true, red: false} // 对象的用法,必须先提前设置,后期通过修改true或false控制类
            class_obj: {size: true},// 但是不能往对象中放之前不存在的值,放不存在的值,没有响应式


            // style 推荐使用   对象形式
            // style_str:'font-size: 80px;background-color: green', // vm.style_str='background-color: red'
            // style_arr: [{'font-size': '60px'}]  // vm.style_arr.push({'background-color':'red'})
            // style_obj: {'font-size': '60px', 'background-color': 'green'},
            style_obj: {fontSize: '60px', backgroundColor: 'green'},  // 省略key值的引号后,要变成驼峰形式
        },
        methods: {
            handleClick() {
                // this.class_obj.yellow = true  // 直接放,没有响应式
                Vue.set(this.class_obj, 'yellow', true) // 这样才有响应式
            }
        }
    })


</script>
</html>

三、条件渲染

v-if  v-else-if   v-else

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>

</head>
<body>
<div id="app">

    <div v-if="score>90&&score<=100">优秀</div>
    <div v-else-if="score>80&&score<=90">良好</div>
    <div v-else-if="score>=60&&score<=80">及格</div>
    <div v-else>不及格</div>

</div>
</body>


<script>
    let vm = new Vue({
        el: '#app',
        data: {
            score: 92
        },
        methods: {}
    })


</script>
</html>

四、列表渲染

循环渲染一些数据,比如购物车的数据
v-for:循环字符串,数组,数字,对象

有购物车数据,循环显示再页面中

示例:v-for显示购物车

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css"
          integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
    <script src="./js/vue.js"></script>

</head>
<body>
<div id="app">

    <div class="container-fluid">
        <div class="row">
            <div class="col-md-6 col-md-offset-3">
                <h1 class="text-center">购物车</h1>
                <div class="pull-right">
                    <button class="btn btn-danger" @click="handleClick">加载购物车</button>
                </div>

                <table class="table table-striped">
                    <thead>
                    <tr>
                        <th>id号</th>
                        <th>商品名</th>
                        <th>商品价格</th>
                        <th>商品数量</th>
                    </tr>
                    </thead>
                    <tbody>
                    <tr v-for="good in good_list">
                        <th scope="row">{{good.id}}</th>
                        <td>{{good.name}}</td>
                        <td>{{good.price}}</td>
                        <td>{{good.count}}</td>
                    </tr>
                    </tbody>
                </table>


            </div>

        </div>

    </div>

</div>
</body>


<script>
    let vm = new Vue({
        el: '#app',
        data: {
            good_list: []
        },
        methods: {
            handleClick() {
                this.good_list = [
                    {'id': 1, 'name': '小汽车', 'count': 2, 'price': 100000},
                    {'id': 2, 'name': '脸盆', 'count': 1, 'price': 23},
                    {'id': 3, 'name': '方便面', 'count': 3, 'price': 6},
                    {'id': 4, 'name': '钢笔', 'count': 4, 'price': 5},
                ]
            }
        }
    })


</script>
</html>

v-for循环其它类型

数字,字符串,数组,对象

看到别人写v-for时,在标签上都会加一个 key 属性,目的是为了提高虚拟dom的替换效率
<el-carousel-item v-for="item in 4" :key="item">
key 的值必须唯一,如果不唯一就报错

以后如果数据变了,页面没有发生变化
Vue.set(对象, key, value)
Vue.set(数组, 索引, 值)

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>

</head>
<body>
<div id="app">
    <h1>循环数字</h1>
    <ul>
        <li v-for="(value,index) in number">{{value}}---->{{index}}</li>
    </ul>
    <h1>循环字符串</h1>
    <ul>
        <li v-for="(value,index) in str">{{value}}--->{{index}}</li>
    </ul>
    <h1>循环数组</h1>
    <ul>
        <li v-for="(value,index) in arr">{{value}}---->{{index}}</li>
    </ul>
    <h1>循环对象(key和value是反的)</h1>
    <ul>
        <li v-for="(value,key) in obj">key是:{{key}}=====value是:{{value}}</li>
    </ul>
</div>
</body>


<script>
    let vm = new Vue({
        el: '#app',
        data: {
            number: 10,
            str: 'lqz is handsome',
            arr: [3, 4, 2, 66, 55],
            obj: {name: 'lqz', age: 19, gender: '男'}
        },
        methods: {}
    })


</script>
</html>

五、事件处理

事件指令
    -click:点击事件

input标签的事件
    -input:只要输入内容,就会触发
    -change:只要输入框发生变化,就会触发
    -blur:只要失去焦点,就会触发

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>

</head>
<body>
<div id="app">
    <h1>input事件</h1>
    <input type="text" @input="handleInput" v-model="username"> --->{{username}}
    <h1>change事件</h1>
    <input type="text" @change="handleChange" v-model="username1"> --->{{username1}}
    <h1>blur事件</h1>
    <input type="text" @blur="handleBlur" v-model="username2"> --->{{username2}}

</div>
</body>


<script>
    let vm = new Vue({
        el: '#app',
        data: {
            username: 'lqz',
            username1: '',
            username2: '',
        },

        methods: {
            handleInput() {
                console.log(this.username)

            },
            handleChange() {
                console.log('我执行了')
            },
            handleBlur(){
                console.log('失去焦点了')
            }
        }
    })


</script>
</html>

六、数据双向绑定

数据双向绑定---》只有input标签---》v-model 做双向数据绑定
之前写的,其实都是数据的单向绑定
    修改js的值,页面变了

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>

</head>
<body>
<div id="app">
    <h1>单向数据绑定,咱们不用</h1>
    <!--    <p>用户名<input type="text" :value="username"></p>-->
    <!--    <p>密码<input type="password" :value="password"></p>-->
    <!--    <p>-->
    <!--        <button @click="handleSubmit">登录</button>-->
    <!--    </p>-->

    <h1>双向数据绑定</h1>
    <p>用户名<input type="text" v-model="username"></p>
    <p>密码<input type="password" v-model="password"></p>
    <p>
        <button @click="handleSubmit">登录</button>
    </p>


</div>
</body>


<script>
    let vm = new Vue({
        el: '#app',
        data: {
            username: 'lqz',
            password: '123'
        },
        methods: {
            handleSubmit() {
                console.log(this.username)
                console.log(this.password)
            }
        }
    })


</script>
</html>

过滤小案例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>

</head>
<body>
<div id="app">
    <input type="text" v-model="search" @input="handleInput">
    <hr>
    <ul>
        <li v-for="item in newdataList">{{item}}</li>
    </ul>


</div>
</body>


<script>
    let vm = new Vue({
        el: '#app',
        data: {
            search: '',
            dataList: ['a', 'at', 'atom', 'attoo', 'be', 'beyond', 'cs', 'csrf'],
            newdataList: ['a', 'at', 'atom', 'attoo', 'be', 'beyond', 'cs', 'csrf'],
        },
        methods: {
            // handleInput() {
            //     console.log(this.search)
            //     // 根据用户输入的search,对数组进行过滤,剩下只有包含输入文字的字符串
            //     var _this = this
            //     this.newdataList = this.dataList.filter(function (item) {
            //         if (item.indexOf(_this.search) >= 0) {
            //             return true
            //         } else {
            //             return false
            //         }
            //     })
            // }


            // handleInput() {
            //     console.log(this.search)
            //     // 根据用户输入的search,对数组进行过滤,剩下只有包含输入文字的字符串
            //     var _this = this
            //     this.newdataList = this.dataList.filter(function (item) {
            //         return item.indexOf(_this.search) >= 0
            //     })
            // }



            handleInput() {
                this.newdataList = this.dataList.filter(item => item.indexOf(this.search) >= 0)
            }
        }

    })


    


</script>
</html>

补充:

几种常用的过滤方法文章来源地址https://www.toymoban.com/news/detail-472567.html

// 1 补充1 ,数组的过滤
    // var arr = ['a', 'at', 'atom', 'attoo', 'be', 'beyond', 'cs', 'csrf']
    // // 数组.filer(匿名函数,接受一个参数,函数必须返回true或false,如果返回true,表示这个值保留)
    // var new_arr = arr.filter(function (item) {
    //     console.log(item)
    //     if (item.length > 3) {
    //         return true
    //     } else {
    //         return false
    //     }
    //
    // })
    // console.log(new_arr)


    // 2 判断一个子字符串,是否在另一个字符串中
    // var s='is'
    // var s1 = 'lqz is handsome'
    // var res=s1.indexOf(s)   // s的索引位置,如果大于等于0,说明s在s1中
    // console.log(res)


    // 3 过滤除,数组中有at的字符串
    // var arr = ['a', 'at', 'atom', 'attoo', 'be', 'beyond', 'cs', 'csrf']
    // var search = 'at'
    // var new_arr = arr.filter(function (item) {
    //
    //     if (item.indexOf(search) >= 0) {
    //         return true
    //     } else {
    //         return false
    //     }
    //
    // })
    // console.log(new_arr)

到了这里,关于Vue基础第二篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python基础练习100题--第二篇:文件篇】

    这些题都是在B站的练习题,链接在这 对于刚学python的新手来说十分的适合, 可以加强和巩固我们的基础。 嘿嘿 一起噶油吧!🍉 🍉 学无止境,都看到这了,点个赞关注支持一下呗!嘿嘿(* ̄︶ ̄)

    2024年02月02日
    浏览(46)
  • vue2 使用 cesium 【第二篇-相机视角移动+添加模型】

    搞了一阵子 cesium,小白入门,这东西很牛逼,但是感觉这东西好费劲啊!网上资料不多,每个人的用法又不一样,操作起来真的是绝绝子。之前写了一篇 vue2 使用 cesium 的博文,没有写完,本来想继续写来着,想了一下还是重新开一篇吧。上一篇说到了事件,今天不想写事件

    2024年02月11日
    浏览(48)
  • 【MySQL从删库到跑路 | 基础第二篇】——谈谈SQL中的DML语句

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】🎈 本专栏旨在分享学习MySQL的一点学习心得,欢迎大家在评论区讨论💌 前面我们已经讲解了SQL语句中的DDL语句。今天我们继续来学习SQL的DML语句。

    2024年02月07日
    浏览(53)
  • 进程组,会话的基础概念,以及进程组,会话,控制终端,前台后台之间的联系(系列文章第二篇)

    这个系列的文章有四篇,其目的是为了搞清楚 : 进程,shell,shell进程,终端,控制终端,前台进程,后台进程,控制进程,前台进程组,后台进程组,会话,守护进程,init进程,用户进程,系统进程 它们之间的联系与区别 系列文章第一篇传送门:全面理解shell进程、终端

    2024年02月04日
    浏览(84)
  • C++入门: 类和对象笔记总结(上)

     C语言是 面向过程 的, 关注 的是 过程 ,分析出求解问题的步骤,通过函数调用逐步解决问题。  C++是基于 面向对象 的, 关注 的是 对象 ,将一件事情拆分成不同的对象,靠对象之间的交互完成。   C语言结构体中只能定义变量,在C++中,结构体升级成类内不仅可以定

    2024年02月07日
    浏览(43)
  • Spring篇---第二篇

    一、构造器注入 将被依赖对象通过构造函数的参数注入给依赖对象,并且在初始化对象的时候注 入。 优点: 对象初始化完成后便可获得可使用的对象。 缺点: 当需要注入的对象很多时,构造器参数列表将会很长; 不够灵活。若有多种注入方式,每种 方式只需注入指定几

    2024年02月07日
    浏览(43)
  • Vue.js核心概念简介:组件、数据绑定、指令和事件处理

    本文介绍了Vue.js的四个核心概念:组件、数据绑定、指令和事件处理。每个概念都通过一个简单的示例进行了详细的解释。通过学习这些概念,您将能够充分利用Vue.js的强大功能,构建高效、灵活的Web应用程序。 1 组件 组件是Vue.js的核心概念之一,它允许您将UI分解为相互作

    2024年02月04日
    浏览(59)
  • 数据恢复软件分享(第二篇)

    在之前与大家分享了10款免费好用的数据恢复软件,得到了很多小伙伴的热烈反馈,其中也有很多宝贵建议,鉴于有好东西第一时间与大家分享的原则,这次在总结大家反馈的基础上又推荐了十款好用的数据恢复软件,在分析它们各自特点之后,在公众号工具窗口提供了这1

    2024年02月07日
    浏览(47)
  • 初识Linux篇:第二篇

    😁👉本篇主要介绍Linux的一些指令的应用👈 在学习Linux的基本指令之前,让我们先详细的认识一下 操作系统和命令行的概念 ; 🤔什么是操作系统(OS)呢? 操作系统是一款进行 软件资源与硬件管理 的 软件 ; 🤔🤔那么操作系统在计算机软硬件体系结构中大概在什么位置呢

    2024年02月04日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包