vue基础知识

108 阅读4分钟

vue.js

是一套用于构建用户界面的渐进式框架

ps:如果要引用vue的实例需要在顶部引入vue的库

<script src='./vue.js'></script>
<body>
    <div id="app">{{content}}</div>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                content: 'hello world'
            })
    </script>
</body>

data中放的是什么,页面展示的也是什么;data改变则页面随之改变。

v-for(标签指定)可以帮助循环数据

<li v-for="item in list">{{item}}</li>

data:{
    list:['课一''课二']
    }
}

v-on(绑定事件)

<button v-on:click="handleBtnClick"></button>

methods:{
    handleBtnClick:function(){
        alert('click')
    }
}

v-model(数据双向绑定)

<input type="text" v-model="inputValue"/>

data:{
    inputValue:''
}

input中的value值与data中的inputValue绑定,两者相互影响。

v-bind(样式绑定)设置样式属性

v-bind:class 设置一个对象,动态切换 class

<div v-bind:class="{ active: isActive }"></div>

v-bind:style 直接设置样式

<div id="app">
    <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
</div>

v-if(条件渲染)指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 truthy 值的时候被渲染。

<div v-if="awesome">Vue is awesome!</div>

可以使用 v-else 指令来表示 v-if 的“else 块”,v-else 元素必须紧跟在带 v-if 或者 v-else-if 的元素的后面,否则它将不会被识别。

v-else-if,顾名思义,充当v-if的“else-if 块”,可以连续使用,类似于 v-elsev-else-if也必须紧跟在带v-if或者v-else-if的元素之后。

用key管理可复用的元素Vue会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染。

v-show(根据条件展示元素的选项)

<div v-show="ok">Hello!</div>

ps:不同的是带有 v-show 的元素始终会被渲染并保留在 DOM 中。v-show 只是简单地切换元素的 CSS 属性 display。
v-show不支持<template>元素,也不支持v-else

vue实现TodoList

<body>
    <div id="app">
        <input type="text" v-model="inputValue"/>
        <button v-on:click="handleBtnClick">提交</button>
        <ul>
            <li v-for="item in list">{{item}}</li>
        </ul>
    </div>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                list:[]
                inputValue:''
            },
            methods:{
                handleBtnClick:function(){
                    this.list.push(this.inputValue)
                    this.inputValue=''
                }
            })
    </script>
</body>

MVVM模式(Model-View-ViewModel)

当数据变更时,vue中底层自动根据数据的不同帮助我们重新渲染页面

前端组件化

可将一个整体页面切割成一个个部分,每部分即组件。合理拆分组件可以把一个大型项目拼接出来,每个组件的维护性会提高。总而言之,每一个组件就是页面上的区域。

简单的组件间传值

父组件向子组件传值:
父组件通过v-bind绑定值
父组件通过v-for遍历list,获得每一个item,:content未v-bind:content的简写,把item的值绑定到content字段传给子组件。

<todo-item v-bind:content="item"
           v-for="item in list">
</todo-item>

在子组件中通过props接收从父组件传过来的值。

var TodoItem = {
    props:['content'],
    template:"<li>{{content}}</li>"
    } 

在子组件中通过插值表达式{{}}的方式可以将接收到的content值绑定到<li>标签上。

methods:{
    handleItemClick:function(){
        this.$emit("delete")
        }
    }
}

在父组件中监听delete事件,如果监听到就根据当前的index把item从list中删除

<todo-item v-bind:content="item"
           v-for="item in list"
           @delete="handleItemDelete>
</todo-item>

methods:{
    handleItemClick:function(){
        this.$emit("delete",this.index);
        }

vue的计算属性,方法,侦听器

计算属性

计算属性——通过计算得来的属性
PS:计算属性的缓存机制:当计算属性依赖的变量不发生任何改变的时候,计算属性将沿用上一次计算的结果,不会再重新计算。

计算方法

每当触发重新渲染时,调用方法将总会再次执行函数

侦听器

watch,为一个对象,内部可以添加data中的变量作为监听对象,如果监听对象发生变化(值必须变成另一个),则触发对应的侦听器中的函数

计算属性的setter和getter

<script>
    var vm = new Vue({
        el:"#app",
        data:{
            firstName:"Dell",
            lastName:"Lee"
        },
        computed:{
            fullName:{
                get:function(){
                    return this.firstName +" "+this.
                        lastName
                },
                set:function(value){
                    console.log(value);
                }
            }
        }
    })
</script>

set:通过设置一个值来改变它相关联的值,而改变了它相关联的值之后,又会引起fullName值的重新计算,页面也就跟着变化了

computed:当它依赖的值发生变化的时候,他就会重新的计算、更新。
即:当你set fullName的时候,this.firstName的值发生变化,恰好这个值又是fullName所依赖的一个值,所以就会引起fullName的重新计算,重新计算后,fullName变了,页面上显示的fullName也发生变化了