vue2——vue2的语法和一些指令

1.vue简介

        vue2受到了MVVM模型的启发,可以做到双向数据绑定

2.vue实例

        每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的,vue实例代理了data,methods中变量的访问。在实例中可以通过this访问当前实例中的data,methods。

 根组件(模块)
    let option={
        data:{},
        methods:{},
    // 生命周期钩子函数
        created(){
            this...
        },
        ...,
        watch:{
            msg(){
                this
            }
        },
        computed:{
            students_male(){
                this
            }
        }
    }
    let vm = new Vue(options)

3.模板语法 数据的渲染

将状态显示到视图中 model->view
    绑定
    1)双大括号{{}}
        可以存在任意变量或者表达式
        变量:
        {{msg}} //data:{msg:"hello'}
        方法:方法一定要加括号
        {{foo()}} //methods:{foo(){console.log('---------------')}}
        表达式:
        {{JSON.stringify(Object)}} //data:{Object:{}}
        {{msg?msg:"hello"}} //data:{msg:' '}

    2)指令
        v-on:eventType.事件修饰符="事件处理函数"
        <form v-on:submit.prevent='函数'>阻止默认行为
        <form v-on:submit.stop='函数'>阻止冒泡
        <form v-on:submit.once='函数'>只绑定一次
        <form @submit="">         v-on:简写成@

        eventType   
            dom类型:click,submit,hover...
            自定义类型:dd...(常用在组件通信中)

        v-bind:属性名=“属性值”  v-bind:简写成:
        <img src="常量"/>
        <img v-bind:src="变量或表达式或方法"/>
        <img :src="变量或表达式或方法"/>

        v-for=“”
        //data:{arr:[{},{},{}]}
            <ul>
                <li v-for='item in(of) arr' v-bind:key='item.id'></li>
            </ul>

        v-if="xxxx"
        v-else-if  ="xxxx"
        v-else="xxxx"
        条件满足时才渲染


        v-show="xxxxx"条件满足时显示,但都被渲染       
        通过display:none控制是否显示
        
        v-bind:model=''(通常应用在form元素中)
        v-model(通常应用在表单元素中)
        双向数据绑定
        1.将msg值作为input的默认值
        2.如果用户操作了表单,v-model会将表单元素中的值映射到msg中
        <input v-model='msg'>

        v-html
            将html输出并且解析

4.生命周期
    beforeCreate

            vue实例还未被创建,vue实例代理了data和methods
            数据劫持,data ->vue Object.defineProporty()
        created
            vue实例创建完毕,可以通过this来直接访问data,methods中的属性
        beforeMount
            此时具有渲染函数,template-ast->render 模板变成渲染函数的过程,此时只有虚拟节点。
        mounted
            已经完成了初步绑定,render,完成渲染,虚拟节点被置换成模板节点
            可以在这个期间执行ajax
        -----数据改变----
        beforeUpdate
            在重新渲染之前执行
        updated
            完成了重新渲染
        ------------------
        beforeDestroy
            在销毁之前,释放资源(闭包,内部函数访问了外部变量)
        destroyed
            销毁后

5.双向数据绑定
    v-model表单
<form v-on:submit.prevent="submitHandler" v-bind:model="role">
    角色<input type="text" v-model="role.name">
    <input type="submit" >
</form>
/*data(){
    return{
        role:{}
    }
}*/ 

6.事件
    v-on:click='事件处理函数'
    v-on:click.事件修饰符='事件处理函数 '
    v-on:click.事件修饰符='事件处理函数(传参)' 

7.计算属性和监听器
    1.计算属性: 像函数一样定义,但是无法接收参数
        定义:
        {data:{
            students:[]
        },
        computed:{
            students_male(){
                //对data中数据进行计算后输出
                return this.students.filter()
            }
        }
        }
        特性
            1多次调用同一个计算属性,计算属性函数只执行一次
            2当被计算的属性发生变化,计算属性函数会重新执行
        调用
            就像属性一样被调用,不加括号

    2.监听器
    无需点击搜索按钮,就可以进行搜索
        1.定义:
        {
            data:{
                msg:'',
                obj:{}
            },
            watch:{
                //当msg变化时就会调用这个函数
                msg(newVal,oldVal){

                },
                obj(newVal,oldVal){

                }
            }  
        }

v-for 和 v-if是否可以共用?会出现什么问题?优先级什么?v2和v3有区别吗?
v2
当它们处于同一节点,v-for 的优先级比 v-if 更高,这意味着 v-if 将分别重复运行于每个 
v-for 循环中。当你只想为部分项渲染节点时,这种优先级的机制会十分有用,如下:

<li v-for="todo in todos" v-if="!todo.isComplete">
{{ todo }}
</li>

上面的代码将只渲染未完成的 todo。

而如果你的目的是有条件地跳过循环的执行,那么可以将 v-if 置于外层元素 (或 <template>) 上。
如:

            <ul v-if="todos.length">
            <li v-for="todo in todos">
                {{ todo }}
            </li>
            </ul>
            <p v-else>No todos left!</p>

8.模块化(组件)
    vue中模块是最小组成单元
    1.组件定义
        vue参数的定义过程
        let stuList={
            template:`
            <div v-for=''>{{msg}}</div>
            //一个组件的根只能有一个
            `,
            data(){
                return {
                }
            },
            methods:{}
        }
    2.组件的注册
        1.全局注册
            将组件注册到vue中,所有组件都可以使用该组件
            //Vue  component注意不要写错了!
            Vue.component('stu_list',stuList)
        2.局部注册
            将组件注册到某个组件的内部,只有当前组件可以使用这个组件
            let articlePage={
                template:` `,
                data(){
                    return {
                    }
                },
            components:{
                'stu_list':stuList
                }
            }
        3.参数的传递
            相当于声明了一个形式参数
            组件内部如何接受传递的参数?
            let sList={
                props:['data']
            }
            形参进行类型限制
             let sList={
                props:{
                    data:Array
                }
            }
            形参,类型限制,校验
            let sList={
                props:{
                    data:{
                        type:Array,
                        default:[],
                        validator:function(val){

                        }
                    }
                }
            }

          4.插槽
                简单插槽
                具名插槽
                component:article-page
                <div>
                <slot name="header></slot>
                <slot></slot>
                <slot name='footer></slot>
                </div>
                调用
                <article-page>
                <div slot='header></div>
                <div ></div>
                <div slot='footer></div>
                </article-page>
                作用域插槽
                    作用域插槽可以通过回调函数的思想来理解

                    components:stu-list
                    <ul>
                        <li v-for='item in data' :key='item.id'>
                            <slot v-bind:row="item></slot>
                        </li>
                    </ul>

                        component:article-Page
                        <stu-list>
                           <div clot-scope='scope'>
                           {{scope.row.xxx}}
                           </div>
                        </stu-list>

                    父组件调用子组件,子组件在执行过程中又返回调用父组件的内容【插槽】,在调用过程中通过v-bind为这个插槽传递参数,在父组件通过slot-scope=‘scope’来获取传递过来的参数,进行自定义渲染
            5.事件发射$emit

                   $emit
                可以触发监控在当前组件上的指定事件
                stu-info
                <div>
                {{msg}}
                <button @click="closehandler> 关闭</button>
                </div>
                methods:{
                    closehandler(){
                        this.$emit('close',1)
                    }
                }
                article-page
                <stu-info @close='close'></stu-info>
                methods:{
                 close(num){
                     alert(num);
                 }   
                } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值