Vue基础操作(新手看这章就对了)

目录

基础知识

了解Vue编写方式

创建hello word页面

data改为函数方式

指令

一、基础指令

二、单项数据绑定

三、双向数据绑定

事件绑定

在事件对应的方法中获取到事件对象

不加括号

加括号,加括号一般是需要有额外参数的情况

事件修饰符

阻止冒泡

使用原生js阻止冒泡

使用vue事件的修饰符阻止冒泡

阻止默认行为

使用原生js阻止默认行为

使用vue事件的修饰符阻止默认行为

一次事件

键盘事件修饰符


Vue官方网站:Vue.js - 渐进式 JavaScript 框架 | Vue.js (vuejs.org)

基础知识

对于我们初次学习,我们使用自行下载js的方式。

本次文章使用的是vue2.7.js版本,版本过低有些操作可能无法实现。

了解Vue编写方式

  • 一个vue实例只能接管一个容器
  • 插值语法:{{}}  可以读取到在data的所有属性

创建hello word页面

html代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>vue2</title>
</head>
<body>
    <div id="app">
        {{message}}
    </div>
</body>
</html>

js代码

el:用于指定当前vue实例为哪个容器使用,值为css选择器字符串

data:用于储存数据,数据供el指定的容器使用

<script src="./js/vue2.js"></script>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            message: 'Hello world!',
        },
    });
</script>

结果

通过控制台修改数据

data改为函数方式

注意

以上的页面data中数据发生变化,那么在容器用到的数据会自动更新

data的写法,我们通常会写成函数的方式,代码如下:

data(){
    return {
        message: 'Hello world!',
    }
}

data为啥要写成函数?

Vue 里面data属性之所以不能写成对象的格式,是因为对象是对地址的引用,而不是独立存在的。如果一个.vue 文件有多个子组件共同接收一个变量的话,改变其中一个子组件内此变量的值,会影响其他组件的这个变量的值。如果写成函数的话,那么他们有一个作用域的概念在里面,相互隔阂,不受影响。

指令

什么是指令?    

在vue中提供一些对于页面+数据的更为方便的操作,这些操作就叫做指令。

在html中是这样使用

<div v-xxx=''></div>

在vue中v-xxx就是vue的指令,指令就是以数据去驱动DOM行为的,简化DOM操作。

一、基础指令

  • v-text 不可解析html标签
  • v-html 可解析html标签
  • v-if 做元素的插入(append)和移除(remove)操作
  • v-else-if
  • v-else
  • v-show display:none 和display:block的切换
  • v-for 数组 item,index 对象 value,key ,index

指令综合实例 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <div v-text='mytext'></div>
        <hr>
        <div v-html='myhtml'></div>
        <hr>
        <button v-if="isButtonIf">v-if 元素插入和移除</button>
        <hr>
        <button v-if="num==1">测试v-if</button>
        <button v-else-if="num==2">测试v-else-if</button>
        <button v-else>测试v-else</button>
        <hr />
        <button v-show="isButtonShow">v-show 元素的显示和隐藏</button>
        <hr />
        v-for 循环数组。这个指令写道哪个标签就循环哪个标签,可以显示数组内容和下标
        <ul>
            <li v-for="(love,index) in lovesArray">
                {{index}}-{{love}}
            </li>
        </ul>
        v-for 循环对象。可以显示对象的key和value
        <ul>
            <li v-for="(attr,key) in myUser">
                {{key}}:{{attr}}
            </li>
        </ul>
        v-for 循环对象数组。可以显示对象的成员value
        <ul>
            <li v-for="(u,index) in userArray">
                {{index}}:{{u.username}}
            </li>
        </ul>
        v-for 循环数字
        <ul>
            <li v-for="num in 10">
                {{num}}
            </li>
        </ul>
    </div>
</body>
<script src="../js/vue.js"></script>
<script>
    var app = new Vue({
        el: '#app', // 用于指定当前vue实例为哪个容器使用,值为css选择器字符串
        data() {
            return {
                mytext: '<h1>我是v-text</h1>',
                myhtml: '<h1>我是v-html</h1>',
                isButtonIf: true,
                num: 2,
                isButtonShow: false,
                lovesArray: ['吃', '睡', '玩'],
                myUser: {
                    username: 'youyou',
                    age: 18
                },
                userArray: [{
                        username: 'youyou',
                        age: 18
                    },
                    {
                        username: 'feifei',
                        age: 30
                    }
                ]
            }
        }
    });
</script>
</html>

结果

二、单项数据绑定

v-bind指令可以在其名称后面带一个参数,参数通常是HTML元素的特性(attribute

v-bind:属性名 ="表达式"

简写形式 :属性名 ="表达式"

<body>
    <div id="app">
        <img v-bind:src="tupian" width="300px">
        <img :src="tupian" width="300px">
    </div>
</body>
<script>
    var app = new Vue({
        el: '#app',     // 用于指定当前vue实例为哪个容器使用,值为css选择器字符串
        data(){// 用于储存数据,数据供el指定的容器使用
            return{
                tupian:'./img/long.jpg',
            }
        },
    });
</script>

单项不能从前端传值到data中,只能从data把值传到前端

三、双向数据绑定

v-model指令能轻松实现表单输入和应用状态之间的双向绑定

v-model ="变量"

一般多用于表单获取和设置数据

<body>
    <div id="app">
       <form action="">
           <input type="text" v-model="person.name">
           <input type="text" v-model="person.age">
           <select v-model="person.love">
               <option value="eat">吃</option>
               <option value="he">喝</option>
           </select>
           <input type="radio" v-model="person.sex" value="1">男
           <input type="radio" v-model="person.sex" value="2">女
       </form>
    </div>
</body>
<script>
    var app = new Vue({
        el: '#app',     // 用于指定当前vue实例为哪个容器使用,值为css选择器字符串
        data(){// 用于储存数据,数据供el指定的容器使用
            return{
                person:{
                    name:"小美",
                    age:19,
                    love:"eat",
                    sex:2,
                },
            }
        },
    });
</script>

事件绑定

事件绑定v-on:事件名="表达式||函数名" 简写 @事件名="表达式||函数名"

事件名可以是原生也可以是自定义的。注意函数的定义也要在Vue中,采用methods属性

在事件对应的方法中获取到事件对象

不加括号
<body>
    <div id="app">
        <button @click="fun1" >点击获取事件对象</button>
    </div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        methods:{
            fun1(event){
                console.log(event.target);
            },
        },
    });
</script>
加括号,加括号一般是需要有额外参数的情况
<body>
    <div id="app">
        <button @click="fun2($event,'其他参数')" >点击获取事件对象(带括号)</button>
    </div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        methods:{
            fun2(evnet, arg){
                console.log(event.target,arg);
            },
        },
    });
</script>

事件修饰符

阻止冒泡

冒泡发生的情景:子元素和父元素绑定了相同的事件,然后点击了子元素,父元素也触发了该事件

使用原生js阻止冒泡
<body>
    <div id="app">
        <div @click="fun3">
            外层div
            <div @click="fun3">里层div</div>
        </div>
    </div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        methods:{
            fun3(event){
                console.log(event.target);
                event.stopPropagation(); // 使用原生js阻止冒泡
            },
        },
    });
</script>
使用vue事件的修饰符阻止冒泡
<body>
    <div id="app">
        <div @click="fun4">
            外层div
            <div @click.stop="fun4">里层div</div>
        </div>
    </div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        methods:{
            fun4(event){
                console.log(event.target);
            },
        },
    });
</script>
阻止默认行为

有些标签是由默认行为的,比如a标签,有个默认的页面跳转。

使用原生js阻止默认行为
<body>
    <div id="app">
        <a href="http://www.baidu.com" @click="fun5">百度</a>
    </div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        methods:{
            fun5(event){
                console.log(event.target);
                event.preventDefault(); // 使用原生js阻止默认行为
            },
        },
    });
</script>
使用vue事件的修饰符阻止默认行为
<body>
    <div id="app">
        <a href="http://www.baidu.com" @click.prevent="fun6">百度</a>
    </div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        methods:{
            fun6(event){
                console.log(event.target);
            },
        },
    });
</script>
一次事件

此事件只会执行一次,第二次点击无效

<div @click.once="fun7">一次事件</div>
键盘事件修饰符

键盘事件修饰符,主要筛选输入特定字符才触发。

<body>
    <div id="app">
        <!-- 13表示是输入enter,起的keycode值可以查询 -->
        <input type="text" @keyup.13="change">
    </div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        methods:{
            change(event){
                console.log(event.key,event.keyCode);
            },
        },
    });
</script>

评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值