Vue复习(1):引入Vue链接创建项目

  • Post author:
  • Post category:vue




一、引入Vue链接创建项目

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

这样你会得到一个Vue的构造函数,然后就可以通过new语法创建一个vue实例。

代码如下(数据的显示是双括号语法):

<!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>Document</title>
</head>
<body>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>     
    <div id="app">{{num}}</div>
</body>
<script>
     var vm=new Vue({
        el:'#app', 
        data:{
            num:0
        }
    })

</script>
</html>

结果显示如下,这就说明你的vue链接生效了。

在这里插入图片描述



Vue与React的不同一点在于vue里的一些对象我们可以在控制台里直接改变。



二、双向绑定

双向绑定就类似于我们的input标签挂载了一个onchange事件,会将我们输入的值同步到实例中。下面我们以示例形式记录:

1.vue中的方法要写在methods里面,

var vm=new Vue({
        el:'#app', 
        data:{
            num:0
        },
        methods:{
            add:function(){
                
            }
        }
    })

下面是一个点击数字加1的操作,(事件如click在vue中的使用前面要加

v-on

或者是

@

在这里插入图片描述

这种数据的更改是一种异步更改:

在add函数内部添加打印(视图渲染的值和我们data里的num值):

在这里插入图片描述

结果如下,我们可以看出,这是一个异步更改,我们是先修改了num得到值再渲染视图。

在这里插入图片描述



三、props

这里和在react中一样,都是用来

传递参数

的。先创建一个组件Demo,再通过在vue实例中写入component进行

子组件的注册

,这样我们的Demo组件就可以成为子组件而被使用。这样就可以在里面添加Demo组件,然后传递两个参数,Demo接收参数会在props中写入要接收的参数名,然后Demo定义时写入视图部分(一定要写,不然报错),使用双括号语法显示参数。

代码如下:

<!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>Document</title>
</head>
<body>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>     
    <div id="app" v-on:click="add">
        <Demo name="Lucy" age="123"></Demo>
    </div>
</body>
<script>
    var demo=Vue.component('Demo',{
        props:["name","age"],
        template:"<div>{{name}}  {{age}} </div>"
    })
     var vm=new Vue({
        el:'#app', 
        data:{
            num:0
        },
        methods:{
            add:function(){
                this.num++
                console.log("视图:",document.getElementById("app").innerText)
                console.log("num:",this.num)
            }
        },
        component:{
            Demo:demo
        }
    })
    

</script>
</html>

结果显示如下:

在这里插入图片描述

这里props的参数传递还可以写成下面的形式,然后就可以给每个参数设置一定的限制条件如下代码,这里给两个参数添加了类型限制,但我们回看上面代码,发现我们的age传入的时“123″,这显然是个字符串。:

在这里插入图片描述

所以报错:

在这里插入图片描述

解决方法很简单,我们只需在age前面加一个

v-bind

或者



即可将由字符串定义的参数转变为对应类型,如下处理:

在这里插入图片描述



四、计算问题

Vue的组件中是可以写一些计算问题的,如下你可以通过双括号语法进行判断并显示num的正负:

在这里插入图片描述

结果如下:

在这里插入图片描述

但毕竟这里是视图部分,所以我们选择在methods中编写函数并调用,然后在组件中以双括号形式调用函数,代码如下:

<!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>Document</title>
</head>
<body>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>     
    <div id="app" v-on:click="add">
        {{num}}
        {{test()}}
        <Demo name="Lucy" v-bind:age="123"></Demo>
    </div>
</body>
<script>
    var demo=Vue.component('Demo',{
        props:{
           name:{
               type:String,
           } ,
           age:{
               type:Number,
           }
        },
        template:"<div>{{name}}  {{age}} </div>"
    })
     var vm=new Vue({
        el:'#app', 
        data:{
            num:0
        },
        methods:{
            add:function(){
                this.num++
                // console.log("视图:",document.getElementById("app").innerText)
                // console.log("num:",this.num)
            },
            test:function(){
                return this.num>0?"正数":"负数"
            }
        },
        component:{
            Demo:demo
        }
    })
</script>
</html>

但是到这里我们发现,每次的点击渲染,都会触发一遍函数test,而有时我们test返回的结果是不变的,所以这样频繁调用,会影响我们整个程序的性能问题。

所以我们可以在vue实例上添加一个computed属性,他会有一个缓存的机制,只要他的依赖项(num)他就不会执行,当组件更新时,他会判断依赖数据有没有发生变化,没有就会从缓存中取出上一次的结果然后呈现。(还需注意computed里面定义的函数会以属性的形式被调用,所以不带括号)写法如下:

<!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>Document</title>
</head>
<body>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>     
    <div id="app" v-on:click="add">
        {{num}}
        {{test()}}
        {{test1}}
        <Demo name="Lucy" v-bind:age="123"></Demo>
    </div>
</body>
<script>
    var demo=Vue.component('Demo',{
        props:{
           name:{
               type:String,
           } ,
           age:{
               type:Number,
           }
        },
        template:"<div>{{name}}  {{age}} </div>"
    })
     var vm=new Vue({
        el:'#app', 
        data:{
            num:-1
        },
        methods:{
            add:function(){
                this.num++
                // console.log("视图:",document.getElementById("app").innerText)
                // console.log("num:",this.num)
            },
            test:function(){
                console.log("test")
                return this.num>0?"正数":"负数"
            }
        },
        computed:{
            test1:function(){
                console.log("test1")
                return this.num>0?"正":"负"
            }
        },
        component:{
            Demo:demo
        }
    })
</script>
</html>



五、侦听

就像他的名字一样,这里只要对应的数据发生改变,就一定会触发对应的函数,就像下面这个例子,watch要求名字要和你侦听的属性名字一样,所以当num发生变化的时候,watch里的num函数便会触发,里面的函数会有两个参数,分别是改变前后的值。

在这里插入图片描述

打印结果:

在这里插入图片描述

这里你可能想到这个和computed不都差不多嘛

但还是有区别的,扔开函数命名方式,不说,watch是可以获得变化前后的值的,我们可以监听这个值来做出相应的处理提高程序性能。



六、class

根据num的奇偶性来渲染视图的颜色,使用添加class的方法(前面加v-bind)调用test函数,函数返回一个bool值用来确定样式是否被渲染,代码如下:

<!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>Document</title>
    <style>
        .demo1{
            color:red;
        }
        .demo2{
            color:green;
        }
    </style>
</head>
<body>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>     
    <div id="app" @click="num++" class="demo1" v-bind:class="{demo2:test()}">div</div>
    <script>
        var vm=new Vue({
            el:"#app",
            data:{
                num:0
            },
            methods:{
                test:function(){
                    return this.num%2==0?false:true
                }
            }
        })
    </script>
</body>
</html>

点击会修改颜色



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