zoukankan      html  css  js  c++  java
  • 学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>
    
  • 相关阅读:
    聊聊WS-Federation
    用双十一的故事串起碎片的网络协议(上)
    责任链模式的使用-Netty ChannelPipeline和Mina IoFilterChain分析
    最小化局部边际的合并聚类算法(中篇)
    最小化局部边际的合并聚类算法(上篇)
    UVaLive 7371 Triangle (水题,判矩形)
    UVaLive 7372 Excellence (水题,贪心)
    POJ 3312 Mahershalalhashbaz, Nebuchadnezzar, and Billy Bob Benjamin Go to the Regionals (水题,贪心)
    UVa 1252 Twenty Questions (状压DP+记忆化搜索)
    UVa 10817 Headmaster's Headache (状压DP+记忆化搜索)
  • 原文地址:https://www.cnblogs.com/xiaopanjava/p/14004174.html
Copyright © 2011-2022 走看看