• day 65小结


    Vue

    ​ 前端框架: angular react vue
    ​ vue: 有前两大框架的优点, 摒弃缺点, 没有前两个框架健全
    ​ vue优点: 中文API, 单页面应用, 组件化开发, 数据双向绑定, 虚拟DOM, 数据驱动思想(相比DOM驱动)

    vue 渐进式JavaScript框架

    ​ 通过对框架的了解与运用程度,来决定其在整个项目中的应用范围,最终可以独立以框架方式 完成整个web前端项目

    一 走进Vue

    1.什么是Vue

    ​ 可以独立完成前后端分离式web项目的JavaScript框架

    2.为什么要学习Vue

    ​ 三大主流框架之一:Angular React Vue
    ​ 先进的前端设计模式:MVVM
    ​ 可以完全脱离服务器端,以前端代码复用的方式渲染整个页面:组件化开发

    3.特点

    ​ 单页面web应用
    ​ 数据驱动
    ​ 数据的双向绑定
    ​ 虚拟DOM

    4.如何使用Vue

    <div id='app'>
        {{ }}
    </div>
    <script src='js/vue.min.js'></script>
    <script>
    	new Vue({
            el:'#app'
        })
    </script>
    

    二 Vue实例

    1. el: 实例

    new Vue({
    	el:'#app'
    })
    // 实例与页面挂载点一一对应
    // 一个页面中可以出现多个实例对应多个挂载点
    // 实例只操作挂载点内部内容
    

    2. data: 数据

    <div id='app'>
        {{ msg }}
    </div>
    <script>
        var app= new Vue({
            el: '#app',
            data: {
                msg:'数据'
            }
        })
        console.log(app.$data.msg);
        console.log(app.msg);
    </script>
    <!--data为插件表达式中的变量提供数据-->
    <!-- data中的数据可以通过Vue实例直接或间接访问-->
    

    3. methods: 方法

    <style>
        .box { background-color: orange }
    </style>
    <div id='app'>
        <p class="box" v-on:click="pClick">测试</p>
    	<p class="box" v-on:mouseover="pOver">测试</p>
    </div>
    <script>
        var app = new Vue({
        	el: '#app',
        	methods: {
                pClick () {
                    // 点击测试
                },
                pOver () {
                    // 悬浮测试
                }
        	}
        })
    </script>
    <!-- 了解v-on:为事件绑定的指令 -->
    <!-- methods为事件提供实现体-->
    

    4. computed:计算

    <div id="app">
     	<input type="text" v-model="a">
        <input type="text" v-model="b">
        <div>
            {{ c }}
        </div>
    </div>
    
    <script>
    	// 一个变量依赖于多个变量
        new Vue({
            el: "#app",
            data: {
                a: "",
                b: "",
            },
            computed: {
                c: function() {
                    // this代表该vue实例
                    return this.a + this.b;
                }
            }
        })
    </script>
    

    5. 监听

    <div id="app">
     	<input type="text" v-model="ab">
        <div>
            {{ a }}
            {{ b }}
        </div>
    </div>
    
    <script>
    	// 多个变量依赖于一个变量
        new Vue({
            el: "#app",
            data: {
                ab: "",
                a: "",
                b: "",
            },
            watch: {
                ab: function() {
                    // 逻辑根据需求而定
                    this.a = this.ab[0];
                    this.b = this.ab[1];
                }
            }
        })
    </script>
    

    6. 分隔符

    <div id='app'>
        ${ msg }
    </div>
    <script>
        new Vue({
        	el: '#app',
        	data: {
        		msg: 'message'
        	},
            delimiters: ['${', '}']
        })
    </script>
    

    生命周期钩子

    • 表示一个vue实例从创建到销毁的这个过程,将这个过程的一些时间节点赋予了对应的钩子函数
    • 钩子函数: 满足特点条件被回调的方法
    new Vue({
        el: "#app",
        data: {
            msg: "message"
        },
        beforeCreate () {
            console.log("实例刚刚创建");
            console.log(this.msg);
                        
        },
        created () {
            console.log("实例创建成功, data, methods已拥有");
            console.log(this.msg);
        },
        mounted () {
            console.log("页面已被vue实例渲染, data, methods已更新");
        }
        // 拿到需求 => 确定钩子函数 => 解决需求的逻辑代码块
    })
    

    四 Vue指令

    1. 文本相关指令

    <div id="app">
        <!-- 插值表达式 -->
        <p>{{ msg }}</p>
        <!-- eg:原文本会被msg替换 -->
        <p v-text='msg'>原文本</p>
        <!-- 可以解析带html标签的文本信息 -->
        <p v-html='msg'></p>
        <!-- v-once控制的标签只能被赋值一次 -->
        <p v-once>{{ msg }}</p>
    </div>
    <script type="text/javascript">
    	// 指令: 出现在html标签中可以被vue解析处理的全局属性
    	new Vue({
    		el: "#app",
    		data: {
    			msg: "message"
    		}
    	})
    </script>
    

    2 事件指令

    <body>
        <div id="app">
            <!--
            事件指令:   v-on:事件名="方法变量"
            简写:  @事件名="方法变量"
            -->
            <p v-on:click="f1">{{ msg }}</p>
            <p @click="f1">{{ msg }}</p>
            <hr>
            <!--mouseover mouseenter  |  mouseout mouseleave-->
            <p @mouseover="f2" @mouseout="f3" @mouseup="f5" @mousemove="f6" @contextmenu="f7">{{ action }}</p>
            <hr>
    
            <!-- 事件变量,不添加(),默认会传事件对象: $event -->
            <!-- 事件变量,添加(),代表要自定义传参,系统不再传入事件对象,但是可以手动传入事件对象 -->
            <p @click="f8($event, '第一个')">{{ info }}</p>
            <p @click="f8($event, '第二个')">{{ info }}</p>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                msg: '点击切换',
                action: '鼠标事件',
                info: '确定点击者'
            },
            methods: {
                f1 () {
                    this.msg = '点击了'
                },
                f2 () {
                    this.action = '悬浮';
                    console.log('悬浮')
                },
                f3 () {
                    this.action = '离开'
                },
                f4 () {
                    this.action = '按下'
                },
                f5 () {
                    this.action = '抬起'
                },
                f6 () {
                    this.action = '移动';
                    console.log('移动')
                },
                f7 () {
                    this.action = '右键';
                },
                f8 (ev, argv) {
                    console.log(ev, argv);
                    this.info = argv + '点击了';
                }
            }
        })
    </script>
    

    3. 属性指令

    <!-- 给自定义全局属性绑定变量 -->
    <p v-bind:abc="abc"></p>
    <!-- 以原字符串形式绑定全局属性 -->
    <p v-bind:title="'abc'"></p>
    
    <!-- 单类名绑定 -->
    <p v-bind:class="c1"></p>
    <!-- 多类名绑定 -->
    <p v-bind:class="[c2, c3]"></p>
    <!-- 类名状态绑定 -->
    <p v-bind:class="{c4: true|false|var}"></p>
    <!-- 多类名状态绑定 -->
    <p v-bind:class="[{c5: true}, {c6: flase}]"></p>
    
    <!-- 样式绑定 -->
    <div :style="div_style"></div>
    <div :style="{ '100px', height: '100px', backgroundColor: 'blue'}"></div>
    <script type="text/javascript">
    	new Vue({
    		el:"#app",
    		data: {
                abc: "abc",
                c1: "p1",
                c2: "p2",
                c3: "p3",
    			div_style: {
    				 "200px",
    				height: "200px",
    				backgroundColor: "cyan"
    			}
    		}
    	})
    </script>
    <!-- v-bind: 指令可以简写为 : -->
    

    面向对象js

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>面向对象js</title>
    </head>
    <body>
        <h1>面向对象js</h1>
    </body>
    <script>
        // undefined、null、string、number、boolean、object(Array)、function
        // var、let、const、不写
    
        // object(Array)、function
    
        function f1() {
            console.log('f1 run')
        }
        f1();
    
    
        // 构造函数 == 类
        function F2(name) {
            this.name = name;
            this.eat = function (food) {
                console.log(this.name + '在' + food);
            }
        }
        let ff1 = new F2("Bob");
        console.log(ff1.name);
    
        let ff2 = new F2("Tom");
        console.log(ff2.name);
    
        ff1.eat('饺子');
        ff2.eat('sao子面');
    
    
        let obj = {
            name: 'Jerry',
            // eat: function (food) {
            //     console.log(this.name + '在' + food)
            // },
            eat(food) {  // 方法的语法
                console.log(this.name + '在' + food)
            }
        };
        console.log(obj.name);
        obj.eat('hotdog');
    </script>
    </html>
    

    js函数补充

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>函数补充</title>
    </head>
    <body>
        <h1>函数补充</h1>
    </body>
    <script>
        // ES5 ES6
    
    
    
        function f() {
            d = 40; // 全局变量
        }
        f();
    
    
        console.log(d);
    
        const c = 30;  // 常量
        console.log(c);
    
    
        if (1) {
            var a = 10;
            let b = 20;  // let、const定义的变量不能重复定义,且具备块级作用域
        }
        console.log(a);
        // console.log(b);
    
        for (let i = 0; i < 5; i++) {
            console.log(i);
        }
        // console.log(i);
        // console.log(i);
        // console.log(i);
    
    
        function f1() {
            console.log('f1 run');
        }
        let f2 = function () {
            console.log('f2 run');
        };
        f2();
    
        let f3 = () => {
            console.log('f3 run');
        };
        f3();
    
        // 如果箭头函数没有函数体,只有返回值
        let f4 = (n1, n2) =>  n1 + n2;
        let res = f4(10, 25);
        console.log(res);
    
        // 如果箭头函数参数列表只有一个,可以省略()
        let f5 = num => num * 10;
        res = f5(10);
        console.log(res);
    
    
        // 重点:function、箭头函数、方法都具有本质区别
        let obj = {
            name: 'Jerry',
            // eat: function (food) {
            //     console.log(this);
            //     console.log(this.name + '在吃' + food)
            // },
            // eat: food => {
            //     console.log(this);
            //     console.log(this.name + '在' + food)
            // },
            eat(food) {  // 方法的语法
                console.log(this);
                console.log(this.name + '在' + food)
            }
        };
        obj.eat('food');
    
        new Vue({
            data: {
                res: ''
            },
            methods: {
                fn () {
                    // axios插件
                    let _this = this;
                    this.$axios({
                        url: '',
                        method: 'get',
                        data: {
    
                        },
                    }).then(function (response) {
                        _this.res = response.data;
                    })
                },
                fn1 () {
                    // axios插件
                    this.$axios({
                        url: '',
                        method: 'get',
                        data: {
    
                        },
                    }).then(response => {
                        this.res = response.data;
                    })
                }
            }
        })
    </script>
    </html>
    
  • 相关阅读:
    HDOJ 1677 Nested Dolls(LIS+Dilworth)
    POJ 1548 Robots (Dilworth)
    POJ 1065 Wooden Sticks
    第三百四十天 how can I 坚持
    第三百三十九天 how can I 坚持
    第三百三十八天 how can I 坚持
    第三百三十七天 how can I 坚持
    第三百三十六天 how can I 坚持
    第三百三十五天 how can I 坚持
    第三百三十四天 how can I 坚持
  • 原文地址:https://www.cnblogs.com/LZF-190903/p/12052087.html
Copyright © 2020-2023  润新知