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>
  • 相关阅读:
    node.js 安装后怎么打开 node.js 命令框
    thinkPHP5 where多条件查询
    网站title中的图标
    第一次写博客
    Solution to copy paste not working in Remote Desktop
    The operation could not be completed. (Microsoft.Dynamics.BusinessConnectorNet)
    The package failed to load due to error 0xC0011008
    VS2013常用快捷键
    微软Dynamics AX的三层架构
    怎样在TFS(Team Foundation Server)中链接团队项目
  • 原文地址:https://www.cnblogs.com/wwei4332/p/11837622.html
Copyright © 2011-2022 走看看