表单绑定

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>

        <div id="app">
            <input type="text" name="username" v-model.lazy.trim="name" value="" />
            <p>{{name}}</p>

            <textarea rows="3" cols="20" v-model="uname"></textarea>
                <p>{{uname}}</p>
                <span v-for="item in phone" >
                    {{item}}
            <input type="checkbox" name="phone" id="" :value="item" v-model="checkPhone" />
            </span>
            <p>{{checkPhone}}</p>


            <select v-model="choose">
                <option :value ="item" v-for="item in city" >{{item}}</option>
            </select>
            <p>{{choose}}</p>


            <!--  转换为字符串-->
                <input type="text" name="age" v-model.number="age" value=""/>

        </div>

        <script type="text/javascript">
            let app=new Vue({
                el:"#app",
                data:{
                    name:"陈超",
                    uname: "海",
                    phone:['华为','OPPO','苹果'],
                    checkPhone: [],
                    city:['南京','上海','北京'],
                    choose:"",
                    age: 18
                },
                watch:{
                    age:function(val)
                    {
                        console.log(val)
                    }
                }
            })
        </script>



    </body>
</html>

模板语法

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>

        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>

        <div id="app">
            <h3> {{msg}}</h3>
            <!-- 一次性插入,不再修改 -->
            <h3 v-once>{{msg}}</h3>
            <h3>{{htmlMsg}}</h3>
            <h3 v-html="htmlMsg"></h3>
        </div>

        <script type="text/javascript">
            let app=new Vue({
                el:"#app",
                data:
                {
                    msg: "chenchao",
                    htmlMsg:'<span>hello</span>'
                    }
            })
        </script>


    </body>
</html>

插槽

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>

        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
<div id="app">
    <!-- <input-com :username="username" @child-input='changeEvent' ></input-com>
    <h3>{{username}}</h3> -->
    <input type="text"  v-model="username"/>
    <h3>{{username}}</h3>


</div>

        <!-- <input type="text" name="" id="username" value="" /> -->
        <!-- <input type="text" @input="username = $event.target.value" name="" id="" value=""/> -->



        <script type="text/javascript">
            Vue.component("input-com",{
                props:['username'],
                // template:`<input type="text" :value="username" @input="$emit( 'child-input' , $event.target.value)"/>`
                template:`<input type="text" :value="username" />`
            })



            // 监听
            // let inputdom=document.querySelector("#username")
            // inputdom.oninput=function()
            // {
            //     document.querySelector("h3").innerHTML=inputdom.value
            // }


            let app=new Vue({
                el:"#app",
                data:{
                    username:""

                },methods:{
                    changeEvent:function(data){
                        this.username=data
                    }
                }


            })
        </script>

    </body>
</html>

插槽解析

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>


        <div id="app">
            <!-- <demo :html='content'></demo> -->

            <demo1><p>helloworld</p></demo1>
        </div>

        <script type="text/javascript">
            // Vue.component("demo",{
            //     props:['html'],
            //     template:`<div class="input-al">
            //     <h1>温馨提示</h1>
            //     <div class="content">
            //         {{html}}
            //     </div>
            // </div>`

            // })
            Vue.component("demo1",{
                template:`<div class="input-al">
                <h1>温馨提示</h1>
                <div class="content">
                    <slot></slot>
                </div>
            </div>`

            })
            let app=new Vue({
                el:"#app",
                data:{
                    content:"小心熊出没"
                }


            })
        </script>



    </body>
</html>

过度动画

<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
    <link rel="stylesheet" type="text/css" href="css/animate.min.css"/>    


    <style type="text/css">
        .context{
            width: 100px;
            height:100px;
            background-color: #00FFFF;
            margin-top: 100px;
            margin-left: 100px;

        }

        /* .fade-enter-active, .fade-leave-active {
          transition: opacity 5s;
        }
        .fade-enter, .fade-leave-to {
          opacity: 0;
        } */

        .fade-enter-active, .fade-leave-active {
          transition: transform 5s;
        }
        .fade-enter, .fade-leave-to  {
          transform: translateX(250px);
          opacity: 0;
        }
    </style>


    </head>
    <body>

        <div id="app">

            <transition name="fade" enter-active-class="animated bounceOutUp" leave-active-class=" animated fadeOutRightBig" >
                <div class="context" v-if="isShow">
                </div>
            </transition>
            <button type="button" @click="enterEvent">点击</button>
        </div>

<script type="text/javascript">
    let app=new Vue({
    el: "#app",
    data:{
    isShow:true

    },
    methods:{
    enterEvent:function()
    {
    this.isShow=!this.isShow
    }
    }


    })

</script>

    </body>
</html>

计算属性

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>


        <div id="app">

            <p>{{fistname+lastname}}</p>
            <p>{{fullname}}</p>
            <!-- 逆序显示字符串 -->
            <p>{{word.split("").reverse().join("")}}</p>
            <p>{{reverseword}}</p>

        </div>


        <script type="text/javascript">
            let app=new Vue({
                el: "#app",
                data:{

                    fistname: "张",
                    lastname:  "三",
                    word: "music"
                },

             // 计算属性
             computed:{
                 fullname: function()
                 {
                     console.log(this)
                     return this.fistname+this.lastname
                 },
                 reverseword:function()
                 {
                return this.word.split("").reverse().join("")
                 }

             }
            })
        </script>


    </body>
</html>

简化版属性

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
        <!-- 父传子 -->
        <div id="app">
            <ol>
                <schoollist v-for="item in school" :local="item" ></schoollist>
            </ol>
        </div>
        <script type="text/javascript">

            Vue.component("schoollist",{

                props:['local'],
                template:`<li >
                <p>地点:{{local}}</p>
                </li>`


            })


            let app=new Vue({
                el:"#app",
                data:{

                    school:['上海','安徽','浙江']

                },




            })



        </script>




    </body>
</html>

实例化样式

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>

    </head>
    <body>


        <div id="app" >

            <div :style="objStyle" ></div>


        </div>

        <script type="text/javascript">
            let app=new Vue({
                el: "#app",
                data:{
                    objStyle:{
                        width: "200px",
                        height: "200px",
                        'background-color': "#00FFFF"
                    }


                }


            })
        </script>


    </body>
</html>

生命周期

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>

        <div id="app">
            <h1>{{msg}}</h1>
            <h1 :class="className">类名绑定</h1>
        </div>

        <script type="text/javascript">
            let app = new Vue({
                el: "#app",
                data: {
                    msg: "helloVue",
                    className: "redBg"
                },
                beforeCreate() {
                    console.log('beforeCreate')
                    console.log(this)
                    console.log(this.msg)
                    console.log(this.clickEvent)
                },
                created() {
                    console.log('created')
                },
                beforeMount() {
                    console.log('beforeMount')
                    let dom = document.querySelector(".redBg")
                    console.log(dom)
                },
                mounted() {
                    console.log('mounted')
                },
                methods: {

                    clickEvent: function() {

                    }

                },
                beforeUpdate() {
                    console.log('beforeUpdate')
                },
                updated() {
                    console.log('updated')
                },
                beforeDestroy() {
                    console.log('beforeDestroy')
                },
                destroyed() {
                    console.log('destroyed')
                }
            })


        </script>



    </body>
</html>

事件绑定

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>

    </head>
    <body>
        <div id="app">
            <p2>{{count}}</p2>
            <br />
            <button type="button" @click="count+=1">点击</button>
            <button type="button" @click="add">点我</button>
        </div>
        <script type="text/javascript">
            let app=new Vue({
                el:"#app",
                data:{
                    count: 0
                },
                methods:{
                    add:function(e){
                        console.log(e),
                        console.log(this)
                        this.count++
                    }
                }
            })
        </script>

    </body>
</html>

事例组件

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>

        <div id="app">
            <ol>
                <product-com v-for="item,index in product" :pro="item"></product-com>
            </ol>
        </div>
        <script type="text/javascript">
            Vue.component('product-com', {
                props: ['pro'],
                template: `<li >
                <p>姓名:{{pro.name}}</p>
                <p>年龄:{{pro.age}}</p>
                <p>类型:{{pro.location}}</p>
                </li>`,
            })


            let app = new Vue({

                el: "#app",
                data: {
                    product: [{
                            name: '詹姆斯',
                            age: 36,
                            location: '小前锋'
                        },
                        {
                            name: '哈登',
                            age: 29,
                            location: '后卫'
                        },
                        {
                            name: '奥尼尔',
                            age: 40,
                            location: '中锋'
                        }
                    ]

                }
            })
        </script>

    </body>
</html>

修饰符

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>

        <div id="app">
            <form action="" method="post">
                <input type="text" name="username" id="" v-model="city" value="" />
                <input @click.prevent="tijiao" type="submit" value="提交" />

            </form>
            <!-- <button  @click.prevent="tijiao" type="submit" value="提交">提交</button> -->
            <button type="button" @click.ctrl="evet">按住</button>
        </div>

        <script type="text/javascript">
            let app = new Vue({

                el: "#app",
                data: {
                    city: '舒城'
                },
                methods: {
                    tijiao: async function() {
                        console.log("提交")
                        console.log(this.city)
                        //let httpUrl =
                            //`https://free-api.heweather.net/s6/weather/now?location=${this.city}&key=3c497450d8e44c5280421ceaba1db581`

                         let httpUrl=`https://devapi.qweather.com/v7/weather/now?location=${this.city}&key=    
b6b9603891c34dc58f55fc31618dc7e3`
                        let res = await fetch(httpUrl)
                        let result = await res.json()
                        console.log(result)


                    },
                    evet: function()
                    {
                        console.log('evet')
                    }
                }



            })
        </script>


    </body>
</html>

样式

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>


        <style>
            .active{
                width: 200px;
                height: 200px;
                background-color: #00FFFF;
            }


        </style>

    </head>
    <body>
        <div id="app">
            <div v-bind:class="{active:isShow}"></div>
        </div>


        <script type="text/javascript">

            let app=new Vue({
                el:"#app",
                data:{

                    isShow: true

                }


            })



        </script>
    </body>
</html>

侦听器

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>

    </head>
    <body>

        <div id="app">

            <h3>{{msg}}</h3>

        </div>
        <script type="text/javascript">
            let app=new Vue({
                el:"#app",
                data:{
                    msg: "chenchao"
                },
                watch:{
                    msg:(val)=>{
                        console.log("监听事件")
                        console.log(val)
                    }
                }
            })
        </script>

    </body>
</html>

组件字传父

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
        <div id="app">
            <ul>
                <!-- <schoollist v-for="item,index in school" @clocal="chooseeve" :key="'abc'+index" :index="index" :local="item" ></schoollist> -->
                <schoollist v-for="item,index in school" :action="chooseeve" :key="'abc'+index" :index="index" :local="item" ></schoollist>
            </ul>
            <p>选中的地区是:{{chooselocal}}</p>
        </div>
        <script type="text/javascript">

            Vue.component("schoollist",{
                props:['local','index','action'],
                template:`<li >
                <p>{{index}} 地点:{{local}}</p>
                <button @click="enterEve(local)">选择</button>

                <button @click="$parent.chooseeve(local)">选择</button>
                <button @click="$parent.chooselocal=local">选择</button>

                </li>`,
                methods:{
                    enterEve:function(local){
                        console.log(local)
                        //this.$emit('clocal',local)
                        //this.$parent.chooseeve(local)

                    }


                }


            })


            let app=new Vue({
                el:"#app",
                data:{

                    school:['上海','安徽','浙江'],
                    chooselocal:""

                },
                methods:{
                    chooseeve:function(data)
                    {
                        console.log("触发")
                        //this.chooselocal=data
                    }

                }




            })



        </script>




    </body>
</html>

组件

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>

        <div id="app">
            <hello-com></hello-com>
        </div>
        <script type="text/javascript">
            let hellocom = Vue.component("hello-com", {
                template: '<div><h1>{{chen}}</h1><button @click="event">修改数据</button></div>',
                data: function() {

                    return {
                        chen: "hello chen"
                    }

                },
                methods: {
                    event: function() {
                        this.chen = "你好"
                    }
                }



            })

            let app = new Vue({
                el: "#app",
                data: {

                },
                components: {
                    'hello-com': hellocom
                },


            })
        </script>

    </body>
</html>

todolist

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <meta name="viewport"
            content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
        <link rel="stylesheet" type="text/css" href="css/style.css" />
        <script src="js/lcXys.js" type="text/javascript" charset="utf-8"></script>
        <link rel="stylesheet" type="text/css" href="css/animate.min.css"/>
    </head>
    <body>

        <div id="app">
                    <div class="main">
                        <div class="header">
                            <div class="logo">记事本</div>
                            <!-- 绑定回车事件,v-model绑定输入框的value值 -->
                            <input type="text" v-model="inputValue" id="input" @keydown.enter="enterEvent" placeholder="请输入待办事项" />
                        </div>
                        <div class="doing todo">
                            <h3><span class="title">正在进行</span><span class="num">{{this.doingList.length}}</span></h3>
                            <div class="list">
                                <transition-group name="slide" mode="out-in" enter-active-class="animated bounceInLeft" leave-active-class="animated bounceOutRight">
                                    <div class="todoItem" v-for="item,index in doingList" :key="'doing'+index">
                                        <input @click.prevent="checkDone(item.id)" :data-id="index" type="checkbox"/>
                                        <div class="content">{{item.content}}</div>
                                        <div class="del" @click="deleteItem(item.id)">删除</div>
                                    </div>
                                </transition-group>
                                <!-- <transition-group name="slide" mode="out-in" enter-active-class="animated bounceInLeft" leave-active-class="animated bounceOutRight">
                                <div class="todoItem" v-for="item,index in doingList" :key="'doing'+index">
                                    <input @click.prevent="checkDone(item.id)" :data-id="item.id" type="checkbox">
                                    <div class="content">{{item.content}}</div>
                                    <div class="del" @click="deleteItem(item.id)">删除</div>
                                </div>
                                </transition-group> -->
                            </div>
                        </div>
                        <div class="done todo">
                            <h3><span class="title">已完成</span><span class="num">{{this.doneList.length}}</span></h3>
                            <div class="list">
                                <transition-group name="slide" enter-active-class="animated bounceInLeft" leave-active-class="animated bounceOutRight">
                                    <div class="todoItem" v-for="item,index in doneList" :key="'done'+index">
                                        <input @click.prevent="checkDone(item.id)" :data-id="index" type="checkbox" checked="checked"/>
                                        <div class="content">{{item.content}}</div>
                                        <div class="del" @click="deleteItem(item.id)">删除</div>
                                    </div>
                                </transition-group>
                                <!-- <transition-group name="slide" enter-active-class="animated bounceInLeft" leave-active-class="animated bounceOutRight">
                                <div class="todoItem" v-for="item,index in doneList" :key="'done'+index">
                                    <input @click.prevent="checkDone(item.id)" :data-id="item.id" type="checkbox" checked="checked">
                                    <div class="content">{{item.content}}</div>
                                    <div class="del" @click="deleteItem(item.id)">删除</div>
                                </div>
                                </transition-group> -->
                            </div>
                        </div>
                    </div>
                </div>
                <script type="text/javascript">
                    var app =new Vue({
                        el:"#app",
                        data:{
                            todoList:[],
                            inputValue:""
                        },
                        computed:{
                            // 通过过滤todoList数据,得到未做好的列表和已做好的列表
                            doingList:function(){
                                let arr    = this.todoList.filter(function(item,index){
                                    return !item.isDone
                                })
                                      return arr;
                            },
                            doneList:function(){
                                let arr    = this.todoList.filter(function(item,index){
                                        return item.isDone
                                    })
                                      return arr;
                                }
                        },
                        methods:{
                            enterEvent:function(){
                                // 将数据添加至todoList
                                this.todoList.push({
                                    content:this.inputValue,
                                    isDone:false,
                                    id:this.todoList.length
                                })
                                // 保存
                                this.saveData()
                                //清除输入框的值
                                this.inputValue=""
                            },
                            // 将数据保存到本地存储
                            saveData:function(){
                                localStorage.todoList = JSON.stringify(this.todoList)
                            },
                            checkDone:function(id){
                                // // 每次删除一个
                                // this.todoList.splice(id,1);
                                // this.todoList.forEach((item,i)=>{
                                //     item.id = i;
                                // })
                                this.todoList[id].isDone = !this.todoList[id].isDone;
                                // 每次修改必须保存
                                this.saveData()
                                console.log(id)
                            },
                            deleteItem:function(id){
                                this.todoList.splice(id,1);
                                this.todoList.forEach(function(item,i){
                                    item.id = i;
                                })
                                this.saveData()
                            }
                        },
                        mounted:function(){
                            this.todoList =localStorage.todoList? JSON.parse(localStorage.todoList):[];
                        }
                    })
                </script>

    </body>
</html>

图片说明

遍历循环

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>

    </head>
    <body>

        <div id="app">
            <h1>球星</h1>
            <ul>
                <li v-for="item in stars">
                {{item}}
            </li>
            </ul>
            <h>学生信息</h>
            <ul>
                <li v-for="item,key in student">
                    <h4>{{key}}----{{item.name}}</h4>
                    <p>年龄: {{item.age}}---学校:{{item.address}}</p>
                </li>
            </ul>
            <p>循环对象</p>
            <ul>
                <li v-for="item in student[0]">
                    <h3>{{item}}</h3>
                </li>
                <img :src="student[0].imag" >
            </ul>

            <p>循环对象</p>
            <ol>
                <li v-for="item in student" v-if="item.age%2==1">
                    <h4>{{item.name}}</h4>
                    <p>年龄: {{item.age}}---学校:{{item.address}}</p>
                </li>

            </ol>

        </div>



        <script type="text/javascript">
            let app=new Vue({
                el: "#app",
                data:{
                    stars:["詹姆斯",'杜兰特','戴维斯'],
                    student:[{name: "陈超",
                               age:20,
                            address: "安徽省",
                            imag: "https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=2899873953,1367070987&fm=26&gp=0.jpg"

                    },
                    {
                        name:"李四",
                        age:21,
                        address: "芜湖市"
                    },
                    {
                        name:"张三",
                        age:25,
                        address:"上海市"
                        }
                    ]
                    }
            })
        </script>

    </body>
</html>

图片说明

动态切换

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>

        <style>
            #pane{
                width: 350px;
                height: 350px;
                background-color: aqua;
            }
        </style>


    </head>
    <body>
        <div id="app">
            <div v-show="isShow" id="pane">
                HelloWorld
            </div>
            <button @click="isClick">切换显示内容</button>
        </div>


        <script type="text/javascript">
            let app=new Vue({
                el:"#app",
                data: {

                    isShow: true,
                },
                methods:{
                    isClick: function()
                    {
                        app.isShow=!app.isShow
                    }
                }
            })
        </script>
    </body>
</html>

动态切换升级版

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
        <style>
            #pane{
                width: 350px;
                height: 350px;
                background-color: aqua;
            }
        </style>



    </head>
    <body>
        <div id="app">
            <div v-show="isShow" id="pane" >
                <h3 v-if="tab==1">首页</h3>
                <h3 v-else-if="tab==2">新闻</h3>
                <h3 v-else>列表</h3>
            </div>
            <button @click="shouye" data-id="1">首页</button>
            <button @click="shouye" data-id='2'>新闻</button>
            <button @click="shouye" data-id='3'>列表</button>
        </div>
        <script type="text/javascript">
            let app=new Vue({
                el: "#app",
                data: {
                    isShow: true,
                    tab: 1 
                },
            methods: {
                shouye:function(e)
                {
                    console.log(e)
                    let tabid=e.target.dataset.id
                    this.tab=tabid
                }
            }

            })
        </script>



    </body>
</html>

图片说明