zoukankan      html  css  js  c++  java
  • 1216 Vue基础

    前端框架

    • angular ---更新程度太快,且不向下兼容
    • react ----- 移动端大多都使用
    • vue
    vue
        有前两大框架的优点,摒弃缺点
        但没有他们框架健全
    

    Vue

    1.简介

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

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

    1.1 优点

    • 中文API
    • 单页面应用
    • 组件化开发
    • 数据双向绑定
    • 虚拟DOM
    • 数据驱动思想(相比DOM驱动)

    2 使用

    所有的script标签,在body与html标签之内的都会在body最下方加载

    通过<script>引入vue.js文件,在<script>标签中实例化vue对象获取关联

    2.1 基础

    1. 挂载点

    el指点与页面中的标签建立关联

    • 通常挂载点都采用id选择器(唯一性)
    • html与body标签不能作为挂载点(组件知识点)
    <body>
        <section>
            <div id="d1">
                {{ msg }}
                <p> {{ info }} </p>
            </div>
        </section>
    </body>
    <script src="vue/vue.js"></script>
    <script>
        // let app = new Vue({
        //     el:'#d1',           // 挂载点,vue实例与页面标签建立关联
        // });
        new Vue({
            el:'section',        // 挂载点采用的是css3选择器语法,但是只能匹配第一次检索到的结果
            // data为挂载点提供数据
            data:{
                msg:'message',
                info:'信息'
            }
        })
    </script>
    </html>
    

    2. 方法属性

    data:{}控制变量

    methods:{}控制属性的变化

    • 声明的实例不需要使用变量来接收,用this代表当前vue实例本身

    • 在实例外部或其他实例内部, 需要定义一个变量接受new Vue()产生的实例

    • console.log(app.pClick);
      console.log(this.pClick);
      
    <body>
        <section>
            <div id="d1">
                {{ msg }}
                <p v-on:click="pClick" v-bind:style="pStyle">{{ info }}</p>
            </div>
            <hr>
            <div class="d2">
                {{ }}
            </div>
            <hr>
            <div class="d2">
                {{ }}
            </div>
        </section>
    </body>
    <script src="js/vue.js"></script>
    <script>
        `
        console.log(Vue);
        let app = new Vue({
            el: '#d1',  // 挂载点:vue实例与页面标签建立关联
        });
    
        new Vue({
            el: '.d2',  // 挂载点采用的是css3选择器语法,但是只能匹配第一次检索到的结果
        });
        `;
        // 总结:
        // 1、通常挂载点都采用id选择器(唯一性)
        // 2、html与body标签不能作为挂载点(组件知识点解释)
    
        // new Vue({
        //     el: 'body'
        // })
        let app = new Vue({
            el: 'section',
            data: {  // data为挂载点内部提供数据
                msg: 'message',
                info: '信息',
                pStyle: {
                    color: 'yellowgreen'
                }
            },
            methods: {
                pClick: function () {
                    if (app.pStyle.color !== 'yellowgreen') {
                        app.pStyle.color = 'yellowgreen'
                    } else {
                        app.pStyle.color = 'red'
                    }
                    console.log(app.msg);
                    console.log(app.pClick);
                    console.log(this.msg);
                    console.log(this.pClick);
                }
            }
        });
    
        // 声明的实例是否用一个变量接收
        // 1、在实例内部不需要,用this就代表当前vue实例本身
        // 2、在实例外部或其他实例内部需要,定义一个变量接收new Vue()产生的实例
        console.log(app.msg)
    
    </script>
    </html>
    

    3. 插值表达式

    {{ }} 用于文本插值

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

    算术运算

            <p>{{ num * 10 }}</p>
    拼接
            <p>{{ msg + num }}</p>
    

    取值

            <p>{{ msg[1] }}</p>
            <p>{{ (msg + num)[3] }}</p>
    

    方法

            <p>{{ msg.split('') }}</p>
    

    2.2 文本指令

    • {{ }}插值表达式
    • v-text
    • v-html
    • v-once

    1. v-text

    不能解析html,只输出文本

    <p v-text="info"> 旧文本 </p>
    	如果有旧文本,则会被替换
    

    2. v-html

    能够解析html语法的文本

    <p v-html="info"></p>
    
    new vue({
    	el:'#app',
    	data:{
    		msg:'message',
    		info:'<i> 这是info斜体字 </i>
    	}
    })
    

    3. v-once

    处理的标签内容只能被解析一次

    添加之后,只会被解析一次
    <p v-on:click="pClick" v-once>{{ msg + info }}</p>
    

    2.3 事件指令

    v-on:事件名 = '方法变量'

    简写:@事件名 = '方法变量'

    • 点击事件click
    • 悬浮mouseover
    • 离开mouseout
    • 按下mousedown
    • 按下抬起mouseup
    • 按下移动mousemove
    • 右键contextmenu

    事件变量

    • 事件的变量加括号是传参
    • 事件对象本身为$event
    * 事件变量,不添加(),默认会传事件对象:$event
    * 事件变量,添加(),代表要自定义传参,系统不再传入事件对象,但是可以手动传入事件对象
    
        <p @click="f8($event,'第一个)">{{ info }}</p>
        <p @click="f8($event,'第二个)">{{ info }}</p>
    
                f8 (ev,argv){
                    console.log(ev,argv);
                    this.info = argv + '点击了'
                }
    

    代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="app">
        <p @click="f1">{{ msg }}</p>
        <hr>
        <!--鼠标悬浮/离开-->
        <p @mouseover="f2" @mouseout="f3">{{ action }}</p>
        <hr>
        <!--鼠标按下/按下抬起/按下移动-->
        <p @mousedown="f4" @mouseup="f5" @mousemove="f6">{{ action }}</p>
        <!--右键-->
        <p @contextmenu="f7">{{ action }}</p>
    
    
    </div>
    
    </body>
    <script src="vue/vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{
                msg:'点击切换',
                action:'鼠标事件',
            },
            methods:{
                f1 (){
                    this.msg = '点击了'
                },
                f2 (){
                    this.action = '悬浮了'
                },
                f3 (){
                    this.action = '鼠标离开'
                },
                f4 (){
                    this.action = '鼠标按下'
                },
                f5 (){
                    this.action = '鼠标抬起'
                },
                f6 (){
                    this.action = '鼠标按下时移动'
                },
                f7 (){
                    this.action = '右键'
                },
    
            }
        })
    </script>
    </html>
    

    2.4 属性指令

    v-bind:属性名='变量'

    简写成:属性名='变量'

    1. 简单使用(单值的使用)

    <p v-bind:title="pTitle" :abc="def">简单使用</p>
    	....
            data: {
                pTitle: '简单使用',
                def: '自定义属性',}
                ....
    

    2. class的属性绑定

    <!--c1变量的值就是类名-->
            <p :class="c1"></p>
                c1: 'd1 d2',
    
    <!--多类名可以用[]语法,采用多个变量来控制-->
            <p :class="[c2, c3]"></p>
                c2: 'd1',
                c3: 'd3',
                
            <!--选择器位可以设置为变量,也可以设置为常量-->
            <p :class="['d1', c4]"></p>
                c4: 'd3','d1'直接是默认的样式
                
                
    <!--{类名: 布尔值}控制某类名是否起作用-->
                <!--<p :class="{x1: false}"></p>-->
          <!--多种语法混用-->
          		第一个是固定样式,是否为真
                <p :class="['d1', {d2: is_true}]" @click="is_true = !is_true"></p>
    

    3. 样式属性(了解)

    <p :style="myStyle">样式属性</p>
    
    		data中定义:
                myStyle: {
                     '100px',
                    height: '100px',
                    backgroundColor: 'red'
                }
    
    
    <p :style="{ w,height: h, backgroundColor: bgc}">样式属性</p>
    
    		data中定义:
                w: '200px',
                h: '100px',
                bgc: 'green'
    
    

    JS面向对象补充

    数据类型

    undefined/null/string/number/boolean/object(Array)/function
    

    定义变量的方式

    var/let/const/不写
    

    对象object与function

    面向过程(函数)
    	function f1(){
    		console.log('f1 run)
    	}
    	f1();
    
    面向对象
    	定义类(构造函数 == 类)
        function F2(){
        console.log('f1 run)
        }
        f1();
        
    JS中类的参数的传值与接收互相分离,多传值不会接收,少传值会是undefined参数
    	    // 构造函数 == 类
        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');
    

    JS函数的补充

    定义变量

    作用域 : 全局 -- 块级 -- 局部

    var			// for循环时,会是全局的
    let			// 不能重复定义,且具备块级作用域,出去括号就不认了
    const		// 常量不可以修改
    不写			// 函数内定义则是全局变量
    

    函数的定义

    第一种
    	function f1(){
            console.log('f1')
        }
        f1();
        
    第二种
        let f2(){
            console.log('f2')
        }
        f2();
        
    第三种(箭头函数)
        let f3 = () => {
            console.log('f3')
        };
        f3();
    

    箭头函数

    如果箭头函数没有函数体,只有返回值
    	let f4 = (n1,n2) => {
    		return n1 + n2;
    	}
    	
    可以写成
    	let f4 = (n1,n2) => n1 + n2;
    	let res = f4(10,25);
        console.log(res)
    
    如果兼有函数参数列表只有一个,可以省略括号()
    	let f5 = num => num * 10;
    	let res = f5(10);
        console.log(res);
    

    重点:

    function/箭头函数/方法都具有本质区别

    <script>
    	let obj = {
            name: 'Jerry',
            
        // function
            eat: function (food) {
                console.log(this.name + '在' + food)
                
        // 箭头函数  (this不找当前调用者,找调用者的父一层)
            eat: food => {
                console.log(this)// 指向window
                console.log(this.name + '在' + food) //箭头函数this不能指向上层
                
                
        // 方法
            eat (food) {   // 方法的语法
                console.log(this);
                console.log(this.name + '在' + food) }
        };
    
        obj.eat('123')
                
    
    ---------------------------------------------------------
    
    
        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>
    
    

    作业

    img

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .box {
                 200px;
                height: 200px;
            }
    
        </style>
    </head>
    <body>
    <div id="app">
        <p class="box" :style="{backgroundColor: bgc}"></p>
    
        <input type="button" value="红" @click="c_red">
        <input type="button" value="黄" @click="c_ye">
        <input type="button" value="蓝" @click="c_bl">
    </div>
    </body>
    <script src="vue/vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{
                bgc:'white'
            },
            methods:{
                c_red(){
                    this.bgc = 'red'
                },
                c_ye(){
                    this.bgc = 'yellow'
                },
                c_bl(){
                    this.bgc = 'blue'
                },
            }
        })
    
    </script>
    </html>
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            #wrap {
                 200px;
                height: 200px;
                background-color: red;
            }
    
        </style>
    </head>
    <body>
    <div id="app">
        <div id="wrap" :style="{backgroundColor: bgc}" @click="change_c"></div>
        <span>{{ count }}</span>
    </div>
    </body>
    <script src="vue/vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{
                bgc:'blank',
                count:0,
                colorArr:['pink','green','cyan']
            },
            methods:{
                change_c(){
                    let n = this.count++;
                    this.bgc = this.colorArr[n % this.colorArr.length]
                }
            }
        })
    </script>
    </html>
    

    img

  • 相关阅读:
    操作系统:进程同步
    操作系统:线程的概念
    操作系统:进程的概念与控制
    操作系统:操作系统概述
    CTF-WEB:攻防世界 ics-05(preg_replace() 函数 /e 漏洞)
    《剑指 Offer》学习记录:题 11:旋转数组的最小数字
    《剑指 Offer》学习记录:题 28:对称二叉树
    Linux为什么不是硬实时
    普通线程和内核线程
    linux内核栈和用户栈
  • 原文地址:https://www.cnblogs.com/fwzzz/p/12052036.html
Copyright © 2011-2022 走看看