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

    vue初识(渐进式JavaScript框架)

    定义:Vue.js是一套构建用户界面的框架,只关注视图层

    Vue.js是前端的主流框架之一,和Angular2+、React.js一起,并成为前端三大主流框架!

    优点:

    1、使用框架,能够提高开发的效率

    2、提高代码的维护性,提高效率

    3、让用户不再操作DOM元素,解放了用户的双手,让程序员可以更多的时间去关注业务逻辑

    框架与库的区别:

    框架:是一套完整的解决方案;对项目的侵入性较大,项目如果需要更换框架,则需要重新架构整个项目。

    库:提供某一个小功能,对项目的侵入性较小,如果某个库无法完成某些需求,可以很容易切换到其它库实现需求。

    MVC与MVVM的区别

    MVC是后端的分层开发概念;

    MVVM是前端视图层的概念,主要关注于视图层分离,也就是说:MVVM把前端的视图层,分为了三部分Model、View、VMViewModel;

    Vue.js 的代码结构

    1、引入vue.js

    2、写视图层,我们要展示的内容 (body里的html代码)

    3、实例化Vue()   var vm = new Vue ({})

      data: 存放数据

      el:  控制的是那块视图

      methods: 放置响应方法

    使用

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
    <div id="app">
            <div>{{title}}</div>
    //属性绑定,v-bind 加在属性前,等号后写data属性名,可以简写,直接加上冒号(:)
            <input type="text" :value="intro">
    //事件绑定 v-on:click="随便起的名",这个名在jsmethods中添加事件响应程序
    <input type="button" @click="popOn">
        </div>
    </body>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        //创建vue的实例
        var vm = new Vue({
            //指定vue控制界面区域 ,只写id 唯一
            el : "#app",
            //界面的数据
            //之后我们在操作的时候更多的是操作数据,去影响界面宣染
            //
            data:{
                title:"hello vue",
                intro:"这是vue的介绍"
            },
    methods:{
    //单击事件,给按钮绑定了一个单击事件,这是单击事件的相应程序
    popOn(){
    console.log(this.title)
    }
             },
     
        })
    </script>
    </html>
    

    插值表达式、v-cloak、v-text、v-html

    插值表达式  {{}}  可以在内容前后插入一些内容

    v-cloak : 当js运行完之后显示页面。

    v-text:会替换掉元素里的内容

    v-html:可以渲染html界面  (识别html标签)

     <style>
            /* 属性选择器 */
            /* 使js加载完成之后在显示页面 */
            [v-cloak] {
                display: none;
            }
        </style>
     
    </head>
     
    <body>
        <div id="app">
           <h3 v-cloak>{{title}}</h3>
            <!-- v-text覆盖原本的内容 -->
            <div v-text="intro">本来的内容</div>
            <!-- 插值内容前后 -->
            <div>{{intro}}本来的内容</div>
            <div v-html="richText"></div>
        </div>
     
    </body>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        //创建vue的实例
         
        var vm = new Vue({
            el: "#app",
            data: {
                title: "常用指令",
                intro: "v-text",
                richText:"<div>本来的内容</div>"
            }
        })
        //插值表达式{{}},可以在前后插入一些内容
            // v - text:会替换掉元素里的内容
            // v 

    v-bind 界面元素属性值的绑定

    1.括号里不加引号的都是我们data里的数据读取
    2.如果想使用字符串需要加上引号
    3.里面可以写表达式
    4.里面也可以调用定义好的方法,拿到的是方法的返回值

    使用:

    <body>
        <div id="app">
            <div v-bind:name="divName">标题</div>
            <input v-bind:type="inputType" value="点击">
        </div>
        <script>
            /* v - bind
            界面元素属性值的绑定
            1.括号里不加引号的都是我们data里的数据读取
            2.如果想使用字符串需要加上引号
            3.里面可以写表达式
            4.里面也可以调用定义好的方法,拿到的是方法的返回值 */
            var vm = new Vue({
                el: "#app",
                data: {
                    divName: "title",
                    inputType: "button"
                }
            })
        </script>

     v-on   进行事件的绑定,我们用的最多的是click事件绑定  简写@

    :click="dianjishijian(参数)"     可以传参数

    <body>
        <div id="app">
            <h3>{{title}}</h3>
     
            <!-- v-on:事件类型 = “函数名” -->
            <button v-on:click="changeTitle1">修改</button>
            <button @click="changeTitle">修改2</button>
            <button @dblclick="dbl">双击</button>
        </div>
    </body>
    <script>
        const vm = new Vue({
            el: "#app",
            data: {
                title: "天亮教育"
            },
            methods: {
                changeTitle() {
                    console.log("点击");
                    console.log(this.title);//天亮教育
                    // console.log(title1);//实参
                },
                changeTitle1() {
                    console.log("修改");
                },
                dbl() {
                    console.log("双击了")
                }
            }
        })
    </script>

    事件修饰符: 

    1.stop阻止冒泡
    2.prevent阻止默认事件
    3.capture添加事件侦听器时使用事件捕获模式
    4.self只当事件在该元素本身(比如不是子元素)触发时触发回调
    5.once事件只触发一次

    //阻止事件冒泡
            .box {
                 100px;
                height: 100px;
                background-color: red;
            }
            .box1 {
                 50px;
                height: 50px;
                background-color: blue;
            }
        </style>
    </head>
     
    <body>
        <div id="app">
            <div class="box" @click="clickBox">
                <div class="box1" @click.stop="clickInner"></div>
            </div>
        </div>
    </body>
    <script>
        const vm = new Vue({
            el:"#app",
            data:{
     
            },
            methods: {
                clickBox() {
                    console.log("点击了外盒子");
                },
                clickInner(){
                    console.log("点击的内盒子");
                }
            }
        })
    </script>
    //阻止默认事件
    <body>
        <div id="app">
            <a href="#" @click.prevent ="aclick">跳转</a>
        </div>
         
    </body>
     <script>
         var vm = new Vue({
             el:"#app",
             data:{
     
             },
             methods:{
                 aclick(){
                     console("跳转")
                 }
             }
         })
     </script>
    //捕获模式
     <body>
            <div id="app">
                <div class="box" @click.capture="clickBox">
                    <div class="box1" @click.capture="clickInner">
                        <div class="box2" @click = "clickInner2"></div>
                    </div>
                </div>
            </div>
        <!-- 捕获从外向里 -->
    </body>
    <script>
            const vm = new Vue({
                    el: "#app",
                    data: {
     
                    },
                    methods: {
                        clickBox() {
                            console.log("点击了外盒子");
                        },
                        clickInner() {
                            console.log("点击的内盒子");
                        },
                        clickInner2() {
                            console.log("点击了最内的盒子");
                        }
                    }
               
     
    //只当事件在该元素本身(比如不是子元素)触发时触发回调
     
    <body>
        <div id="app">
            <div class="box" @click.self="clickBox">
                <div class="box1" @click.self="clickInner">
                    <div class="box2" @click.self="clickInner2($event)"></div>
                </div>
            </div>
        </div>
        <!-- 捕获从外向里 -->
    </body>
    <script>
        const vm = new Vue({
            el: "#app",
            data: {
     
            },
            methods: {
                clickBox() {
                    console.log("点击了外盒子");
                },
                clickInner() {
                    // console.log(e.target)
                    console.log("点击的内盒子");
                },
                clickInner2(e) {
                    console.log(e.target)
                    console.log("点击了最内的盒子");
                }
            }
        })
    </script>
    //事件只触发一次
    <body>
        <div id="app">
            <button @click.once="boxclick">点击</button>
        </div>
    </body>
    <script>
        var vm = new Vue({
            el:"#app",
            data:{},
            methods: {
                boxclick(){
                    console.log("点击");
                }
            }
        })

    v-model数据双向绑定 

    作用:数据双向绑定

    注意:绑定的是表单控件

    <body>
        <div id="app">
            <!-- 作用:数据双向绑定
            注意:绑定的是表单控件 -->
            <input type="text" v-model="num1">
            <button @click = "btn">点击</button>
        </div>
    </body>
    <script>
        var vm = new Vue ({
            el:"#app",
            data:{
                num1:1
            },
            methods:{
                btn(){
                    console.log(this.num1)
                }
            }
        })
    </script>

    V-for 

    1.便利数组,参数(item,index)inlist
    2.便利对象,参数(value,key,index)inlist
    3.便利数字,numin10(1~10)

    <body>
        <div id="app">
            {{title}}
            <ul>
                <!-- i为索引 item为内容 -->
                <input type="text" v-model="item1">
                <button @click="search">检索</button>
                <li v-for="(item,i) in list" @click="show(item.name)" >id:{{item.id}}   ----值:{{item.name}}</li>
                 
            </ul>
            <ul>
                <li v-for="(item,i) in list1">id:{{item.id}} ----值:{{item.name}} </li>
            </ul>
        </div>
    </body>
    <script>
        const vm = new Vue({
            el: "#app",
            data: {
                title: "hello",
                obj: {
                    age: 10
                },
                list: [{
                    id: 1,
                    name: "李白"
                },
                {
                    id: 2,
                    name: "杜甫"
                },
                    {
                    id: 3,
                    name: "孟浩然"
                }],
                list1:[],
                item1: null
            },
            methods:{
                show(name){
                    alert(name);
                },
                search(){
                   this.list1 = this.list.filter(item=>{
                        return item.name == this.item1;
                    })
                }
            }
        })
    </script>
  • 相关阅读:
    mybatis-cache model
    多线程开发(1)
    正则表达式(3) — 正则表达式库
    正则表达式(2) — 表达式规则
    我在迈瑞工作的两年总结
    正则表达式(1) — 常用的表达式
    C++系列(2) — 智能指针
    C++系列(1) — string
    路径去除前缀
    SIMD性能优化
  • 原文地址:https://www.cnblogs.com/bigbang66/p/13623390.html
Copyright © 2011-2022 走看看