Vue2和Vue3

Vue2和Vue3

初识

vue.js

<script src="https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/vue/2.6.14/vue.min.js"></script>

helloVue

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <script type="text/javascript"
        src="https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/vue/2.6.14/vue.min.js"></script>
</head>

<body>


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

    <script type="text/javascript">
        new Vue({
            el: '#app', //用于指定vue为哪个容器服务
            //暂时先写成一个对象,后期是一个函数
            data: {
                message: 'Hello Vue!' 
            }
        })
    </script>
</body>

</html>

单文件

模版语法

    <div id="app">
        <!-- 插值语法 -->
        <h1>hello {{ name }}</h1>

        <!-- 指令语法 -->
        <a v-bind:href="url">百度</a>
        <a :href="url">百度</a>
    </div>

数据绑定

    <div id="app">
        <!-- 标准 -->
        单向数据绑定:<input v-bind:value="name" /><br />
        双向数据绑定:<input v-model:value="name" /><br />

        <!-- 简写 -->
        单向数据绑定:<input :value="name" /><br />
        双向数据绑定:<input v-model="name" /><br />

        <!-- v-model:value 只能应用在表单类元素(输入元素)-->
    </div>

el和data的两种写法

    <script type="text/javascript">
        // el第一种写法
        // new Vue({
        //     el: '#app',
        //     data: {
        //         name: 'zhangsan',
        //     }
        // })

        // el第二种写法
        const v = new Vue({
            data: {
                name: 'zhangsan',
            }
        })
        v.$mount('#app')

        // data第一种写法(对象式)
        // new Vue({
        //     el: '#app',
        //     data: {
        //         name: 'zhangsan',
        //         age: 18
        //     }
        // })

        // data第二种写法(函数式)
        // new Vue({
        //     el: '#app',
        //     //这里不能写成箭头函数,否则this指向window
        //     data: function () {
        //         // 这里的this指向Vue实例对象
        //         console.log(this)
        //         return {
        //             name: 'zhangsan',
        //             age: 18
        //         }
        //     }
        // })

        // data第二种写法(函数式简写)
        new Vue({
            el: '#app',
            data() {
                console.log(this)
                return {
                    name: 'zhangsan',
                    age: 18
                }
            }
        })
    </script>

理解MVVM

  • MVVM是Model-View-ViewModel的缩写,是MVVM架构模式

model: 数据
view: 模版
viewModel: Vue实例对象

img

数据代理

Object.defineProperty()

    <script type="text/javascript">
        let number = 18;
        let person = {
            name: '张三',
            sex: '男',
        };

        // 在一个对象中添加一个属性,并设置get和set方法
        Object.defineProperty(person, 'age', {
            // value: 18, //属性值
            // enumerable: true,//是否可枚举
            // writable: true, //是否可以修改
            // configurable: true, //是否可以删除

            get() {
                console.log('读取了get方法');
                return number;
            },
            set(newValue) {
                console.log('修改了set方法');
                number = newValue;
            }
        });

        console.log(person);

    </script>

img

Vue中的数据代理

<body>
    <div id="app">
        学校名称:{{school}} <br>
        学校地址:{{address}}
    </div>

    <script type="text/javascript">
        const v = new Vue({
            el: '#app',
            data() {
                return {
                    school: '清华大学',
                    address: '北京市海淀区清华园'
                }
            }
        })

        console.log(v);
    </script>
</body>

img
img

数据时在data属性中,而之所以要在Vue对象中有自定义的属性(school,address)是因为方便在{{school}}插值时方便书写而不写成{{_data.school}}

img

事件

事件处理

<body>
    <div id="app">
        <h1>{{name}}</h1>

        <!-- 标准 -->
        <button v-on:click="showInfo1">点我提示信息1(不接受参数)</button>
        <!-- 简写 -->
        <button @click="showInfo2(18)">点我提示信息2(接受参数)</button>


    </div>

    <script type="text/javascript">
        const vm = new Vue({
            el: '#app',
            data: {
                name: '小明'
            },
            methods: {
                showInfo1() {
                    //此处的this指向的是Vue实例(也是不能写成箭头函数)
                    alert('你点击了按钮')
                },
                showInfo2(data) {
                    console.log(data);
                    alert('你点击了按钮')
                }
            }
        })

        console.log(vm);
    </script>
</body>

img

事件修饰符

<body>
    <div id="app">
        <a href="http://www.baidu.com" @click="showInfo">点我提示信息</a> <br />
        <a href="http://www.baidu.com" @click.prevent="showInfo">点我提示信息(阻止默认事件)</a> <br />
    </div>

    <!-- 事件修饰符
        1.prevent 阻止默认事件
        2.stop 阻止事件冒泡
        3.self 只在当前元素触发事件
        4.once 只触发一次
        5.capture 捕获事件
        6.passive 被动事件监听器
    -->

    <script type="text/javascript">
        const vm = new Vue({
            el: '#app',
            methods: {
                showInfo() {
                    alert('hello')
                }
            }
        })

        console.log(vm);
    </script>
</body>

键盘事件

<body>
    <div id="app">
        1<input type="text" placeholder="按下回车提示" @keyup="showInfo" /><br />

        <!-- 快捷绑定案件 -->
        2<input type="text" placeholder="按下回车提示" @keyup.enter="showInfo2" />
    </div>

    <!-- 键盘事件
        keyup: 键盘抬起事件
        keydown: 键盘按下事件

        Vue中常用案件别名:
            enter: '回车',
            delete: '删除',
            tab: 'tab',
            space: '空格',
            up: '上键',
            down: '下键',
            left: '左键',
            right: '右键'
    -->

    <script type="text/javascript">
        const vm = new Vue({
            el: '#app',
            methods: {
                showInfo(e) {
                    if (e.keyCode === 13) {
                        console.log(e.target.value);
                    }
                },
                showInfo2(e) {
                    console.log(e.target.value);
                }
            }
        })

        console.log(vm);
    </script>
</body>

计算属性

<body>
    <div id="app">
        姓:<input type="text" v-model="firstName" /><br />
        名:<input type="text" v-model="lastName" /><br />
        姓名:<span>{{ fullName }}</span><br />
    </div>


    <script type="text/javascript">
        const vm = new Vue({
            el: '#app',
            data: {
                firstName: '张',
                lastName: '三'
            },
            // 计算属性
            computed: {
                //标准写法
                // fullName: {
                //     get() {
                //         console.log('fullName get')
                //         return this.firstName + this.lastName
                //     },
                //     set(value) {
                //         console.log('fullName set')
                //         const names = value.split('')
                //         this.firstName = names[0]
                //         this.lastName = names[1]
                //     }
                // }

                //简写
                fullName() {
                    return this.firstName + this.lastName
                }
            }
        })

        console.log(vm);
    </script>
</body>

监视属性

posted @ 2025-03-24 21:15  -殇情-  阅读(21)  评论(0)    收藏  举报