vue框架初学

vue笔记-1

特点
1.js框架
2.简化Dom操作
3.响应式数据驱动

(1)导入开发版本的Vue.js

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

(2)创建Vue实例对象,设置el属性和data属性

<div id="app">
        {{ message }}
      </div>

(3)使用简洁的模板语法把数据渲染到页面上

<script>
        var app = new Vue({
            el: '#app',
            data: {
                 message: 'Hello world!'
                }
            })
    </script>

el挂载点

vue实例的作用范围:
el命中元素及后代元素,外部不可以

是否可以使用其他的选择器:
可以,建议使用id选择器。

是否可以设置其他的Dom元素:
可以,支持双标签(除了html和body),不支持单标签

data

vue中用到的数据定义在data中,data中可以写复杂类型数据,渲染复杂数据类型,遵守js的语法就ok。

 <div id="app">
        {{message}}
        <h5>{{person.name}}{{person.age}}</h5>
        <ul>
            <li>{{color[0]}}</li>
        </ul>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                message:"你好",
                person:{
                    name:"jack",
                    age:"18"
                },
                color:["red","pink","black"]
            }
            
        })
    </script>

v-text指令

设置标签的文本值(textContent)
v-text会替换{{}}里面全部的值

<div id="app">
        <h2 v-text="message+'!'">猫猫</h2>//不会显示猫猫
        <h2 v-text="name+'!'">狗狗</h2>//不会显示狗狗
        <h2>{{message+'!'}}汪汪</h2>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                message:"小花猫",
                name:"fafa"
            }
        })
    </script>

v-html

设置标签的innerHTML值
(如果设置文本和 v-text没什么区别 但v-html会渲染html结构)

 <div id="app">
        <p v-html="content"></p>//有百度链接可以点击
        <p v-text="content"></p>//没有百度链接 展现的是文本
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                // content:"小花猫"
                content:"<a href='http://www.baidu.com'>百度</a>"

            }
        })

v-on

为元素绑定事件(可以替换为@) 绑定的方法定义在methods属性中。
重点不是更改dom元素,而是更改数据
数据更新时,使用的dom元素会同步更新,拿到这个数据需要用到this

 <div id="app">
        <input type="button" value="v-on指令" v-on:click="doIt">
        <input type="button" value="v-on简写" @click="doIt">
        <input type="button" value="双击事件" @dblclick="doIt">
        <h2 @click="changeFood">{{food}}</h2>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app=new Vue({
            el:"#app",
            data:{
                food:"韭菜炒鸡蛋"
            },
            methods:{
                doIt:function(){
                    alert("做打工人");
                },
                changeFood:function(){
                    // console.log(this.food);
                    //更改数据
                    this.food +="不好吃"
                }
            }

        })
    </script>

传递自定义参数,事件修饰符。
事件绑定的方法写成函数调用的形式,可以传入自定义参数;
定义方法时需要定义形参来接收传入的实参;
事件的后面跟上 .修饰符 可以对事件进行限制(.enter 可以限制事件触发的案件为回车)

<div id="app">
        <input type="button" value="别点我" @click="cook('蛋挞',300)">
        <input type="text" @keyup.enter="sayHi">
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el:"#app",
            methods:{
                cook:function(food,price){
                    alert(food);
                    alert(price);
                },
                sayHi:function(){
                    alert("学习真令人快乐啊 啊啊啊啊啊")
                }
            }
        })
    </script>

计数器

<div id="app">
        <div class="input-num">
            <button @click="sub"></button>
            <!-- v-text 设置元素的文本值,简写为{{}} -->
            <span>{{num}}</span>  
            <button @click="add"></button>
        </div>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app=new Vue({
            el:"#app",
            data:{
                num:1 //错误写法:num=1
            },
            methods:{
                add:function(){
                    this.num++;  //通过this获取data中的数据
                },
                sub:function(){
                    if(this.num>0){
                        this.num--;
                    }else{
                        alert("别点了");
                    }
                    
                }
            }
        })
    </script>

v-show

根据真假切换元素的显示状态(修改元素的display,实现隐藏)
true显示元素,false隐藏元素

<div id="app">
        <input type="button" value="切换显示状态" @click = "changeIsShow">
        <input type="button" value="累加年龄" @click = "addAge">
        <img v-show="isShow" src="mimi.jpg" alt="">
        <img v-show="age>=18" src="mimi.jpg" alt="">
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el:"#app",
            methods:{
                changeIsShow:function(){
                    this.isShow = !this.isShow;
                },
                    addAge:function(){
                        this.age++;
                    }
            },
            data:{
                isShow:false,
                age:17
            }
        })
    </script>

v-if

v-if:操纵的是dom树 表达式值为true时,元素存在于dom树中,false时,从dom树中移除.
v-show:操纵的是样式(用于频繁操作的元素)

<div id="app">
        <input type="button" value="显示文字" @click="toggleShow">
        <p v-if="isShow">今天也是快乐学习的一天</p>
        <!-- 并不会显示下面这个p标签,因为temperature没有达到设置的值 -->
        <p v-if="temperature>=35">热死了</p>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                isShow:false,
                temperature:30
            },
            methods:{
                toggleShow:function(){
                    this.isShow = !this.isShow
                }
            }
        })
    </script>

v-bind

为元素绑定属性
简写 :src=“属性名”
如果是class :class="{active:isActive}"

<div id="app">
        <img v-bind:src="imgSrc" alt="" v-bind:title="imgTitle">
        <br>
        <img :src="imgSrc" alt="" :title="imgTitle" :class="{active:isActive}" @click="toggleActive">
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                imgSrc:"mimi.jpg",
                imgTitle:"小猫猫",
                isActive:false
            },
            methods:{
                toggleActive:function(){
                    this.isActive = !this.isActive;
                }
            }   
        })
    </script>

照片切换

列表数据使用数组保存
v-bind指令可以设置元素属性,如src
v-show 和v-if 都可以切换元素的显示状态,频繁切换用v-show

<div id="mask">
        <div class="center">
            <h2 class="title">
                喵喵品种
            </h2>
            <img :src="imgArr[index]" alt="">
            <!-- 左箭头 -->
            <!-- 错误:@click="prev"写到了img里面 -->
            <a href="javascript:void(0)" class="left" @click="prev" v-show="index!=0">
                <img src="images/left.jpg" alt="" >
            </a>
            <!-- 右箭头 -->
            <a href="javascript:void(0)" class="right" @click="next" v-show="index<imgArr.length-1">
                <img src="images/right.jpg" alt="" >
            </a>
        </div>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var mask = new Vue({
            el:"#mask",
            data:{
                imgArr:[
                    "images/01.jpg",
                    "images/02.jpg",
                    "images/03.jpg"
                ],
                index:0
            },
            methods:{
                prev:function(){
                    this.index--;
                },
                next:function(){
                    this.index++;
                }
            }
        })
    </script>

v-for

根据数据生成列表结构,数组经常和v-for结合使用
(item, index) in 数据
item代表每一项,index代表索引.
数组长度的更新会同步到页面上,是响应式的。

<div id="app">
        <input type="button" value="点我加菜" @click="add">
        <input type="button" value="点我减菜" @click="remove">
        <ul>
            <li v-for="(item,index) in arr">
                {{index+1}}猫咪品种:{{item}}
            </li>
        </ul>
        <h2 v-for="item in vegetable" v-bind:title="item.name">
            {{item.name}}
        </h2>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                arr:["暹罗","布偶","英短"],
                vegetable:[
                    {name:"韭菜炒鸡蛋"},
                    {name:"鸡蛋炒韭菜"}
                ]
            },
            methods:{
                add:function(){
                    this.vegetable.push({name:"鸡蛋炒蛋花"});
                },
                remove:function(){
                    this.vegetable.shift();
                }
            }
        })
    </script>

v-model

获取和设置表单元素的值(双向数据绑定,无论修改谁,都会同步改变)
绑定的数据会和表单元素值相关联

<div id="app">
        <input type="button" value="修改message" @click="setM">
        <input type="text" v-model="message" @keyup.enter="getM">
        <h2>
            {{message}}
        </h2>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                message:"天天学习我可真快乐"
            },
            methods:{
                getM:function(){
                    alert(this.message);
                },
                setM:function(){
                    this.message = "真的快乐"
                }
            }
        })
    </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值