Vue-1

  • Post author:
  • Post category:vue




Vue

与传统的命令式编程不同,使用的是声明式编程。

构造实例对象,往对象中添加属性,其中el和data是固定的属性。

let app=new Vue({
    el:'#qq',
    data:{
        message:[1,2,3,345487,52]
    }
})



显示列表

v-for会自动解析,而且是响应式布局(就是数据发了变动就会马上再网页上显示出来。)

<div id="qq">
    <ul>
        <li v-for='item in message'>{{item}}</li>
    </ul>
</div>

在这里插入图片描述

再控制台输入就会马上再页面上表现出来。



计数器案例

1.button要写在大盒子内,不然vue不会捕捉到

2.v-on:click也可以写成@click语法糖的形式

3.v-on:click=”counter++”后面也可以加方法v-on:click=“add”

4.方法下面,得用this,不然会去找全局下面的counter

<div id="box">计数:{{counter}}
    <button v-on:click="counter++">+</button>
    <button v-on:click="counter--">-</button>
</div>

<script src="../vue.js"></script>
<script>
    let app=new Vue({
        el:'#box',
        data:{
            counter:0
        },
        methods:{
            add:function(){
                this.counter++;
            },
            sub:function(){
                this.counter--;
            }
        }
    })



实例对象下面的类

在这里插入图片描述



mvvm

model,view,wm

https://www.jianshu.com/p/ea9d556d6529



生命周期

vue的生命周期理解:创造vue实例的时候会做很多事情,然后他有许多回调函数(hook),你可以设置回调函数知道vue现在进行到哪一步,要进行什么操作了。

再创建vue实例的时候,到其中一步会自动调用created这个函数。

let app=new Vue({
    el:'#qq',
    data:{
        counter:0
    },
    created:function(){
        console.log(123);
    }
})



一些语法

1.双括号语法,里面可以写简单的表达式

    <li>{{counter*6}}</li>
    <li>{{counter+bnanme}}</li>
  1. v-once,代表后面的元素或者组件只会渲染一次,不会随数据改变而改变.

  2. v-pre,代表不会进行渲染双括号语法。

    {

    {counter+bnanme}}

4.v-text和双括号很像,但是他有缺点, 所以一般用双括号,他会覆盖后面的双括号内容。

     <li>{{counter}}</li>
    <li v-text='counter'></li>
    //能显示bnanme
    <li>{{counter}}{{bnanme}}</li>
    不能显示bnanme
    <li v-text='counter'>{{bnanme}}</li>


5.v-html,能解析html标签。


代表以html的格式来渲染counter,

//这里面不用在写{{counter}}了
<li v-html='counter'></li>
    data:{
        counter:'<a href="">123</a>'
    },



v-bind

可以动态绑定一些属性,比如a元素的href,img的src属性等,响应式绑定。

如果没有加:,就会把后面的作为字符串。如果加了,就会把它看做一个变量,从vue实例中寻找对应的值

<img v-bind:src="imgurl" alt="">
语法糖形式:
<img :src="imgurl" alt="">
data:{
    counter:'<a href="">123</a>',
    imgurl:'../img/1.jpg'
}


动态绑定class语法


1.需要写好style属性

.counter{
    color: red;
}

2.用语法糖给他添加class哪个class,添加的为下面这个对象的属性。

<li :class='counter'>123</li>

3.把class赋值给变量

其中值要用双引号才行!

let app=new Vue({
    el:'#qq',
    data:{
        counter:'counter'
    }
})


如果是对象的话,一般不再data里面写类名了,直接在style里面写。


就是style里面的类名可以直接拿过来!!

.acc{
    color: red;
}
.ass{
    color: yellow;
}
<li :class='{ass:isass,acc:isacc}'>123</li>
data:{
    isass:true,
    isacc:true
}


如果原来有class的话,会进行合并不会覆盖!


应用:把固定的样式放在前面的class,把会动态的class放到对象里面

<ul>
    <li class='pp' :class='{ass:isass,acc:isacc}'>123</li>
</ul>

在这里插入图片描述


最后一种方法

(再项目中经常用到,如果class太多,可以利用返回函数来做)

函数调用要加双引号,然后返回要是一个对象,对象里面用冒号

特别注意:一定要注意要不要加this!!!!

<li class='pp' :class="getclass()">123</li>
methods:{
    getclass:function(){
        return {acc:this.isacc,ass:this.isass}
    }
}



绑定一些css内联样式

样式名用驼峰:backgroundColor

键值对用冒号来连接。


对象语法


注意,键名可以不加引号,但是键值一定要加引号,不然会当做变量来解析。

<li :style="{backgroundColor:'red'}">{{message}}</li>


当做变量来解析


red会当做变量,去找下面的字符串到底是什么。

   <li :style="{backgroundColor:red}">{{message}}</li>
let app=new Vue({
    el:'#qq',
    data:{
        message:'123456',
        red:'yellow'
    }
})


如果style用函数的形式返回,注意如果是变量的话要加this

<li :style="sex()">{{message}}</li>
methods:{
    sex:function(){
        return {backgroundColor:this.red};
    }
}



computed的使用

这里就不需要加括号了,就可以直接调用,因为就是把这个当做一个属性而不是函数。

<div id="box">{{fullname}}</div>
computed:{
    fullname:function(){
        return this.name+this.namee;
    }
},


复杂案例


里面可以包含一个各种数组的方法来进行计算。

data:{
    name:[
        {price:44},
        {price:366},
        {price:12},
        {price:11}
    ]
},
computed:{
    fullname:function(){
        let total=0;
        for(var i in this.name){
            total+=this.name[i].price
        }
        return total  
    }
},


详解

其实,computed下面的fullname也只是一个属性,这个属性下面才会有2个方法,get和set,而我们一般只用get,代表输出,不用管set。

而一般我们也只用语法糖的形式来写,所以会把get直接省略,因此,在{

{fullname}}我们不用写函数的调用,因为他只是一个属性。

fullname:{
    set:function(){},
    get:function(){}
}


两种方法的区别


computed和methods其实都可以实现对字符串拼接。

在这里插入图片描述

区别1:computed下面的属性不用调用,methods的属性需要调用

区别2:

computed的属性有缓存机制

,他会观察下面的变量有没有变化,没有变化就不会再调用get函数直接输出。这样性能比较高。而methods下面的函数每次调用都会调用自己的函数,所以性能比较差。


对象字面量增强写法


1.函数增强

var b={
    //现在的简便写法
    qq(){
        console.log(123);
    },
    //以前的写法
    qqq:function(){
        console.log(333);
    }
}


属性增强


就可以直接把属性放进去了

const name='why';
const age=123;
var b={
    name,
    age
}
console.log(b);



版权声明:本文为m0_49255274原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。