• 学vue之前必看


    Vue学习

    1.1 vue.js是什么?

    ​ Vue是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

    1.2 hello Vue

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Vue</title>
    </head>
    <body>
    <div id="app">
        {{messages}}
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <script>
        var vm=new Vue({
            el:"#app",
            data:{
                messages:"hello vue"
            }
        })
    </script>
    </body>
    </html>
    

    还可以通过v-bind绑定元素

    <!DOCTYPE html>
    <html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="UTF-8">
        <title>Vue</title>
    </head>
    <body>
    <div id="app">
        <span v-bind:title="messages">
            鼠标停在我的上面看看
        </span>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <script>
        var vm=new Vue({
            el:"#app",
            data:{
                messages:"hello vue"
            }
        })
    </script>
    </body>
    </html>
    

    1.3判断和循环

    判断if

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="app">
        <h1 v-if="seen">Yes</h1>
        <h1 v-else>No</h1>
    </div>
    <div id="app2">
        <h1 v-if="type==='A'">A</h1>
        <h1 v-else-if="type==='B'">B</h1>
        <h1 v-else-if="type==='C'">C</h1>
        <h1 v-else>D</h1>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <script>
        var vm=new Vue({
            el:"#app",
            data:{
                seen: true
            }
        })
        var vm2=new Vue({
            el:"#app2",
            data:{
             type: 'A'
            }
        })
    </script>
    </body>
    </html>
    

    循环for

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="app">
     <li v-for="item in items">
         {{item.message}}
     </li>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <script>
        var vm=new Vue({
            el:"#app",
            data:{
               items:[
                   {message: '前端'},
                   {message: '后端'},
                   {message: '运维'}
               ]
            }
        })
    </script>
    </body>
    </html>
    

    1.4 methods事件(单向绑定 v-on)

    <div id="app">
        <button v-on:click="SayMessage">Click Me</button>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <script>
        var vm=new Vue({
            el:"#app",
            data:{
              message: '小胖学java'
            },
            methods:{  //方法定义在methods中,v-on绑定事件
                SayMessage: function () {
               alert(this.message)
                }
            }
        })
    </script>
    

    1.5双向绑定(v-model)

    <div id="app">
        请输入:<input type="text" v-model:value="message"/>
        <br/>
        内容为:{{message}}
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <script>
        var vm=new Vue({
            el:"#app",
            data:{
              message: ''
            }
        })
    </script>
    

    下拉框的双向绑定

    <div id="app">
       <select v-model="message">
           <option disabled>---请选择---</option>
           <option>A</option>
           <option>B</option>
           <option>C</option>
       </select>
        <br/>
        选了:{{message}}
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <script>
        var vm=new Vue({
            el:"#app",
            data:{
              message: ''
            }
        })
    </script>
    

    1.6Vue组件

    <div id="app">
        <jinhao v-for="item in items" v-bind:value="item"></jinhao>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <script>
        Vue.component("jinhao",{
            props:['value'],
            template:'<li>{{value.message}}</li>'
        })
        var vm=new Vue({
            el:"#app",
            data:{
                items:[
                    {message: '前端'},
                    {message: '后端'},
                    {message: '运维'}
                ]
            }
        })
    </script>
    

    1.7axios通信

    <div id="app">
        <div>{{info.name}}</div>
        <div>{{info.address.city}}</div>
        <a v-bind:href="info.url">小胖的Java博客</a>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script>
        var vm=new Vue({
            el:"#app",
            //data属性 vm
            data(){
                return {
                 //请求返回合适的参数,必须和json一样
                    info: {
                         name: null,
                        url: null,
                        address: {
                             street: null,
                            city:null
                        }
                    }
                }
            },
            mounted(){
                axios.get('data.json').then(response=>(this.info=response.data));
            }
        })
    </script>
    

    1.7 计算属性Computed

    <div id="app">
        <h1>{{cruuentTime1()}}</h1>
        <h1>{{cruuentTime2}}</h1>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <script>
        var vm=new Vue({
            el:"#app",
            data:{
                merssage: "wo"
            },
          methods: {
                cruuentTime1: function () {
                   return Date.now();
                }
          },
          computed:{
              cruuentTime2: function () {
                  //如果computed中的数据发生了改变,就是merssage变了,返回值return也会发生改变
                  this.merssage;
                  return Date.now();
              }
          }
        })
    </script>
    

    1.8组件插槽 slot

    <div id="app">
    <todo>
        <todo-title slot="todo-title" v-bind:title="title"></todo-title>
        <todo-items slot="todo-items" v-for="item in jishu" v-bind:value="item"></todo-items>
    </todo>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <script>
        Vue.component('todo',{
            template: '<div>' +
                        '<slot name="todo-title"></slot>'+
                        '<ul>'+
                        '<slot name="todo-items"></slot>'+
                    '</ul>'+
                      '</div>'
    
        });
        Vue.component('todo-title',{
            props:['title'],
            template: '<div>{{title}}</div>'
        });
        Vue.component('todo-items',{
            props:['value'],
           template: '<li>{{value.java}}</li>'
        });
        var vm=new Vue({
            el:"#app",
            data:{
                title: '小胖学技术',
                jishu:[
                    {java: "spring"},
                    {java: "springmvc"},
                    {java: "mybatis"}
                ]
            }
        })
    </script>
    

    1.9自定义事件内容分发

    <div id="app">
        <todo>
            <todo-title slot="todo-title" v-bind:title="title"></todo-title>
            <todo-items slot="todo-items" v-for="(item,index) in jishu" v-bind:value="item"
            v-bind:index="index" v-on:remove="removeItems"  v-bind:key="index"></todo-items>
        </todo>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <script>
        Vue.component('todo',{
            template: '<div>' +
                '<slot name="todo-title"></slot>'+
                '<ul>'+
                '<slot name="todo-items"></slot>'+
                '</ul>'+
                '</div>'
    
        });
        Vue.component('todo-title',{
            props:['title'],
            template: '<div>{{title}}</div>'
        });
        Vue.component('todo-items',{
            props:['value','index'],
            template: '<li>{{index}}---{{value}} <button v-on:click="remove">删除</button></li>',
            methods:{
                remove:function (index) {
                  this.$emit('remove',index);
                }
            }
        });
        var vm=new Vue({
            el:"#app",
            data:{
                title: '小胖学技术',
                jishu:[
                   "spring",
                   "springmvc",
                     "mybatis"]
            },
            methods:{
                removeItems:function (index) {
                    console.log("删除了"+this.jishu[index]+"元素");
                    this.jishu.splice(index,1);
                }
            }
        })
    </script>
    
  • 相关阅读:
    分零食「JSOI 2012」
    礼物「AHOI / HNOI2017」
    力「ZJOI2014」
    修改权值「多校联考2019」
    哪吒闹海「多校联考2019」
    消失之物
    灵异事件
    BZOJ1297: [SCOI2009]迷路
    BZOJ3445: [Usaco2014 Feb] Roadblock
    Luogu3953:逛公园
  • 原文地址:https://www.cnblogs.com/xiaopanjava/p/14004174.html
Copyright © 2020-2023  润新知