zoukankan      html  css  js  c++  java
  • day 71 Vue框架

    vue框架:渐进式JavaScript框架
    vue一个环境:可以只控制页面中一个标签、可以控制一组标签、可以控制整个页面、可以控制整个项目
    vue可以根据实际需求,选择控制前端项目的区域范围

    为什么学习vue

    1、html、css、js直接开发项目,项目杂乱,不方便管理,要才有前端框架进行开发,规范项目
    2、Angular、React、Vue三个前端框架,吸取前两个框架的所有优点,摒弃缺点,一手文档是中文
    3、Vue框架优点:
    轻量级
    数据驱动
    数据的双向绑定
    虚拟DOM(嵌套页面架构的缓存)
    组件化开发
    由全球社区维护

    单页面应用、MVVM设计模式

    知识点总结

    1、在html页面中用script标签导入vue环境
    2、vue Vue({ el: "#app" })挂载页面标签,建立关联后控制页面标签

    <body>
    <div id="app">
    <hr>
    <p class="p1">{{ }}</p>
    <hr>
    <p class="p2">{{ }}</p>
    <hr>
    <p id="p">
    <b>{{ }}</b>
    <i>{{ }}</i>
    </p>
    </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
    console.log(Vue);
    // new Vue({
    // el: '.p1',
    // });
    // new Vue({
    // el: '.p2'
    // });
    // new Vue({
    // el: '#p'
    // })

    // el为挂载点,才有css3选择器语法与页面标签进行绑定,决定该vue对象控制的页面范围
    // 1.挂载点只检索页面中第一个匹配到的结果,所以挂载点一般都才有id选择器
    // 2.html与body标签不可以作为挂载点(组件中解释)
    new Vue({
    el: '#app',
    })
    </script>


    3、插值表达式{{ }}可以完成基础运算

    <!-- 1、插值表达式,能完成变量渲染,变量基础运算,变量方法调用,不能完成复杂运算(一步解决不了的,不能出现;) -->
    <p>{{ msg }}</p>
    <p>{{ msg + '拼接内容' }}</p>
    <p>{{ msg[1] }}</p>
    <p>{{ msg.slice(2, 4) }}</p>


    4、插值表达式中的变量有实例成员 data 来提供

    <body>
    <div id="app">
    <p>{{ msg }}</p>
    <p>{{ info }}</p>
    <h3>{{ msg }}</h3>
    </div>

    <div id="main">
    <p>{{ msg }}</p>
    <p>{{ info }}</p>
    </div>
    </body>
    <script src="js/vue.js"></script>
    <script>

    // 实例成员中的data是为vue页面模板通过数据变量的
    let app = new Vue({
    el: '#app',
    data: {
    msg: 'message',
    info: 'vue变量信息'
    }
    });

    let main = new Vue({
    el: '#main',
    data: {
    msg: 'msg',
    info: 'info'
    }
    });

    console.log(app.info);
    console.log(main.info);

    // 创建vue实例(new Vue)传进去的字典(对象)的key,称之为vue实例成员(变量)
    // 访问实例成员,用 vue实例.$成员名, eg:app.$el
    console.log(app.$el);
    console.log(app.$data);

    console.log(app.$data.info);
    </script>


    5、v-on指令可以给标签绑定事件,事件函数由实例成员 methods 来提供

    <body>
    <div id="app">
    <p class="p1" v-on:click="fn">这是一个段落,被点击了{{ count }}下</p>
    <p class="p2" v-on:mouseover="overAction" v-on:mouseout="outAction" >该便签被{{ action }}</p>

    <div v-on:mouseover="overAction" v-on:mouseout="outAction">div被{{ action }}</div>
    </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
    let app = new Vue({
    el: '#app',
    data: {
    count: 0,
    action: '渲染',
    // fn: function () {
    // // console.log(app.count);
    // // app.count ++
    // console.log(this); //在实例成员data下,this不是该vue实例对象,是顶级Window对象
    // }
    },
    // methods就是为vue实例提供事件函数的
    methods: {
    fn: function () {
    // console.log(app.count);
    // app.count ++;
    // console.log(this); // 在实例成员methods下,this代表当前该vue实例对象
    this.count ++
    },
    overAction: function () {
    this.action = '悬浮'
    },
    outAction: function () {
    this.action = '离开'
    }
    }
    });

    </script>


    6、插值表达式{{ 变量 | 过滤器 }}的过滤器由实例成员 filters 来提供

    <body>
    <div id="app">
    <!-- 默认将msg作为参数传给filterFn -->
    <p>{{ msg | filterFn }}</p>

    <!--过滤器串联-->
    <p>{{ num | f1 | f2 }}</p>

    <!--可以同时对多个变量进行过滤,变量用,分割,过滤器还可以额外传入参数辅助过滤-->
    <!--过滤器方法接收所有传入的参数,按传入的位置进行接收-->
    <p>{{ msg, num | f3(666, '好的') }}</p>
    </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
    new Vue({
    el: '#app',
    data: {
    msg: '文本内容',
    num: 1
    },
    filters: {
    filterFn(v1, v2) {
    // console.log(v1);
    // console.log(v2);
    return `<b>${v1}</b>`;
    },
    f1(v1) {
    return v1 * 100;
    },
    f2(v1) {
    return v1 * 100;
    },
    f3(v1, v2, v3, v4) {
    console.log(v1);
    console.log(v2);
    console.log(v3);
    console.log(v4);
    }
    }
    })
    </script>

    7、面向对象js: { 变量, } | function Fn(值){ this.属性 = 值 } | obj = { 方法(){} }

    <script src="js/vue.js"></script>
    <script>
    // 1.js中没有字典,只要对象类型,可以把对象当做字典来使用
    // 2.key本质是属性名,所以都是字符串类型(可以出现1,true),其实都是省略引号的字符串

    let sex = '男';
    let dic = {
    'name': 'Owen',
    1: 100,
    true: 12345,
    age: 18,
    // sex: 'sex',
    sex,
    };
    console.log(dic['name']);
    console.log(dic['1']);
    console.log(dic['true']);
    console.log(dic['age']);
    console.log(dic.sex);

    dic.price = 3.5;
    console.log(dic.price);

    // 声明类创建对象,类可以实例化n个对象,哪个对象调用,this就代表谁
    function People(name, age) {
    this.name = name;
    this.age = age;
    this.eat = function () {
    console.log(this.name + '在吃饭');
    return 123
    }
    }
    let p1 = new People('Owen', 17.5);
    console.log(p1.name);
    let res = p1.eat();
    console.log(res);

    // 直接声明对象,{}内的key都属于当前对象的
    // {}中的方法通常会简写
    let stu1 = {
    name: '张三',
    age: 18,
    // eat: function () {
    // console.log(this.name + '在吃饭');
    // }
    eat () {
    console.log(this.name + '在吃饭');
    }
    };
    stu1.eat()

    // 总结:
    // 1.{}中直接写一个变量:key与value是同名,value为该名变量的值
    // 2.es5下,所有的函数都可以作为类,类可以new声明对象,在函数中用 this.资源 为声明的对象提供资源
    // 3.{}中出现的函数叫方法,方法可以简写 { fn: function(){} } => { fn(){} }
    </script>

    8、文本指令:{{ }} | v-text="" | v-html=""

    <body>
    <div id="app">
    <!--2、v-text:将所有内容做文本渲染 -->
    <p v-text="msg + '拼接内容'"></p>
    <!--3、v-html:可以解析html语法标签的文本 -->
    <p v-text="'<b>' + msg + '</b>'"></p>
    <p v-html="'<b>' + msg + '</b>'"></p>


    <p v-text="`<b>${msg}</b>`"></p>
    <p v-html="`<b>${msg}</b>`"></p> #这里使用了反引号,需要加$符号
    </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
    new Vue({
    el: '#app',
    data: {
    msg: '文本信息'
    }
    })
    </script>

    9、事件指令: v-on:事件名="" | @事件名="" | :事件名="fn" | :事件名="fn($event, 自定义参数)"

    <body>
    <div id="app">
    <!--事件指令:v-on:事件名="事件函数" -->
    <!--简写:@事件名="事件函数" -->
    <p v-on:click="f1">被点击了{{ count }}下</p>
    <hr>
    <p @click="f2">{{ p2 }}</p>
    <hr>
    <!--绑定的事件函数可以添加(),添加括号就代表要传递参数-->
    <ul>
    <li @click="f3(100)">{{ arr[0] }}</li>
    <li @click="f3(200)">{{ arr[1] }}</li>
    <li @click="f3(300)">{{ arr[2] }}</li>
    </ul>
    <ul>
    <li @click="f4(0)">{{ arr[0] }}</li>
    <li @click="f4(1)">{{ arr[1] }}</li>
    <li @click="f4(2)">{{ arr[2] }}</li>
    </ul>
    <hr>
    <!--绑定的事件函数如果没有传递参数,默认传入 事件对象 -->
    <div class="box" @click="f5"></div>
    <hr>
    <!--事件函数一旦添加了传参(),系统就不会默认传入事件对象,在我们还需要使用到事件对象时,可以手动传入 $event -->
    <div class="box" @click="f6(10, $event)"></div>
    </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
    new Vue({
    el: '#app',
    data: {
    count: 0,
    p2: '第二个p',
    arr: [1, 2, 3],
    },
    methods: {
    f1() {
    this.count ++
    },
    f2() {
    console.log(this.p2)
    },
    f3(num) {
    console.log(num);
    },
    f4(index) {
    console.log(this.arr[index]);
    },
    f5(ev, b) {
    console.log(ev);
    console.log(b);
    },
    f6(num, ev) {
    console.log(num);
    console.log(ev);
    }
    },
    })

    </script>


    10、属性指令:v-bind:属性名="" | :title="变量" | :style="字段变量" |
    :class="变量" | :class="[变量1, 变量2]" | :class="{类1:真假, 类2:真假}"

    <style>
    .b1 {
    100px;
    height: 100px;
    background-color: red;
    }

    .box1 {
    150px;
    height: 150px;
    background-color: darkturquoise;
    transition: .3s;
    }
    .box2 {
    300px;
    height: 100px;
    background-color: darkgoldenrod;
    transition: .3s;
    }

    .circle {
    border-radius: 50%;
    }
    </style>
    </head>
    <body>
    <div id="app">
    <!--1.下方的class、id、title、abc等是div标签的属性,属性指令就是控制它们的-->
    <div class="b1" id="b1" v-bind:title="title" :abc="xyz"></div>
    <!--2.属性指令:v-bind:属性名="变量",简写方式 :属性名="变量" -->

    <!--3.属性指令操作 style 属性-->
    <div style=" 200px;height: 200px;background-color: greenyellow"></div> #这里style前没有:号,双引号里实际是字符串
    <!-- 通常:变量值为字典 -->
    <div :style="mys1"></div> #双引号里添加的是变量,或者对象
    <!-- 了解:{中可以用多个变量控制多个属性细节} -->
    <div :style="{ w,height: '200px',backgroundColor: 'deeppink'}"></div>


    <!--重点:一般vue都是结合原生css来完成样式控制 -->
    <!--<div :class="c1"></div>-->

    <!--class可以写两份,一份写死,一份有vue控制-->
    <div class="box1" :class="c2"></div>

    <!--{}控制类名,key为类名,key对应的值为bool类型,决定该类名是否起作用-->
    <div :class="{box2:true, circle:cable}" @mouseover="changeCable(1)" @mouseout="changeCable(0)"></div>


    <!--[]控制多个类名-->
    <div :class="[c3, c4]"></div>
    </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
    let app = new Vue({
    el: '#app',
    data: {
    title: '12345',
    xyz: 'opq',
    mys1: {
    '200px',
    height: '200px',
    // 'background-color': 'greenyellow'
    backgroundColor: 'pink',
    },
    w: '200px',
    c1: 'box1',
    c2: 'circle',
    cable: false,
    c3: 'box1',
    c4: 'circle'
    },
    methods: {
    changeCable(n) {
    this.cable = n;
    }
    }
    });

    setInterval(function () {
    // app.c1 = app.c1 === 'box1' ? 'box2' : 'box1';
    if (app.c1 === 'box1') {
    app.c1 = 'box2';
    } else {
    app.c1 = 'box1';
    }
    }, 300)


    </script>
  • 相关阅读:
    在 idea 下搭建的第一个MyBatis项目及增删改查用法
    解决idea中Tomcat服务器日志乱码及控制台输出乱码
    idea 设置自动生成方法的快捷键 类似于main() 方法
    windows下Tomcat根据日期生成日志catalina.out
    springmvc <from:from>标签的使用
    Spring+Quartz集群环境搭建
    Quartz整合Spring
    Quartz 基本编码
    java中 线程池和 callable 创建线程的使用
    SpringSecurity权限管理框架--基于springBoot实现授权功能
  • 原文地址:https://www.cnblogs.com/wwei4332/p/11837622.html
Copyright © 2011-2022 走看看