• 吴裕雄--天生自然WEB前端开发实战--Vue组件与过渡


    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>Vue组件创建方法一</title>
            <script src="js/vue.min.js"></script>
        </head>
        <body>
            <div id="app">
                 <mycom></mycom>
            </div>
            <script>
                Vue.component('mycom',{
                   template : "<h3>使用vue.extend创建的组件</h3>"   
                })
                var vm=new Vue({
                    el:'#app',
                    data:{
                        },
                });
            </script>
        </body>
        </html>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>Vue组件创建方法二</title>
            <script src="js/vue.min.js"></script>
        </head>
        <body>
            <!--下面<div>标记是Vue控制区域内-->
            <div id="app">
                 <mycom></mycom>
            </div>
            <!--下面<template>标记是Vue控制区域外,组件的模板-->
            <template id="temp">
             <div>
              <h3>利用模板定义组件</h3>
             </div>
            </template>
            <script>
                Vue.component('mycom',{
                   template : "#temp"   
                })
                var vm=new Vue({
                    el:'#app',
                    data:{
                        },
                });
            </script>
        </body>
        </html>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>Vue私有组件</title>
            <script src="js/vue.min.js"></script>
        </head>
        <body>
            
            <div id="app">
                 <mycom></mycom>
            </div>
            
            <template id="temp">
             <div>
              <h3>私有组件</h3>
             </div>
            </template>
            <script>
            var vm = new Vue({
                el: '#app',
                components: {
                    mycom: {
                        template: '#temp',
                    }
                }
             })
            </script>
        </body>
        </html>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>Vue组件中的数据与方法</title>
            <script src="js/vue.min.js"></script>
        </head>
        <body>
          <div id="app">
            <counter></counter>
            <hr>
            <counter></counter>
            <hr>
            <counter></counter>
          </div>
        
          <template id="temp">
            <div>
                <input type="button" value="加一" @click='increment'>
                <h3>{{count}}</h3>
            </div>
          </template>
        
          <script>
            Vue.component('counter',{
              template:'#temp',
              data:function(){
                  return {count:0}
              },
              methods:{
                increment() {
                  this.count++
                }
              }
            })
        
            var vm=new Vue({
              el:'#app',
              data:{},
              methods:{}
            });
          </script>
        </body>
    </html>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>Vue组件切换</title>
            <script src="js/vue.min.js"></script>
        </head>
        <body>
          <div id="app">
            选择需要切换的组件:
            <input type="radio" name="change" v-model="tab" value="myCom1"  checked=""/>1号
            <input type="radio" name="change" v-model="tab" value="myCom2" />2号
            <keep-alive>
                <component :is="tab"></component>
            </keep-alive>
          </div>
         <template id="com1">
             <p> {{title}}</p>
         </template>
         <template id="com2">
             <p> {{title}}</p>
         </template>
      <script>
           Vue.component('myCom1',{
               template:"#com1",
            data(){
                return {
                    title:'子组件1号',
                }
             }
           })
           Vue.component('myCom2',{
               template:"#com2",
                   data(){
                       return {
                           title:'子组件2号',
                       }
                    }
           })
            var vm=new Vue({
              el:'#app',
              data:{
                  tab:'myCom1'
              },
              methods:{}
            });
          </script>
        </body>
    </html>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>Vue组件切换</title>
            <script src="js/vue.min.js"></script>
        </head>
        <body>
          <div id="app">
            选择需要切换的组件:
            <input type="radio" name="change" value="1" @click="flag=true" checked=""/>1号
            <input type="radio" name="change" value="2" @click="flag=false" />2号
           <my-com1 v-if="flag"></my-com1>
           <my-com2 v-else="flag"></my-com2>
          </div>
         <template id="com1">
             <p> {{title}}</p>
         </template>
         <template id="com2">
             <p> {{title}}</p>
         </template>
      <script>
           Vue.component('myCom1',{
               template:"#com1",
            data(){
                return {
                    title:'子组件1号',
                }
             }
           })
           Vue.component('myCom2',{
               template:"#com2",
                   data(){
                       return {
                           title:'子组件2号',
                       }
                    }
           })
            var vm=new Vue({
              el:'#app',
              data:{
                  flag:true
              },
              methods:{}
            });
          </script>
        </body>
    </html>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>父组件传递数据给子组件</title>
            <script src="js/vue.min.js"></script>
        </head>
        <body>
          <div id="app">
            {{msg}}  
            <mycom v-bind:parentmsg="msg"></mycom>
          </div>
          <script>
            var vm=new Vue({
              el:'#app',
              data:{
                  msg:'(父组件的data数据)'
              },
              components:{
                  mycom:{
                      template:"<h3 @click='change'>子组件中获取的父组件数据:{{parentmsg}}---{{title}}</h3>",
                      data(){
                          return{
                              title:'子组件数据标题',
                              content:'子组件数据内容',
                            }
                          },
                        props:['parentmsg'],
                        methods:{
                            change(){
                                this.parentmsg="子组件方法修改了值"
                            }
                        }
                      },
                  }
            });
          </script>
        </body>
    </html>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>子组件传递数据给父组件</title>
            <script src="js/vue.min.js"></script>
        </head>
        <body>
        <div id="test">
            
            name数据:{{datamsgFromSon.name}}<br>
            age数据:{{datamsgFromSon.age}}<br>
            {{dataNumFromSon}}
            <!--父组件向子组件传递方法,使用的是事件绑定机制:v-on,当我们自定义了一个事件属性之后,那么子组件就能够通过某些方式来调用传递进去的方法-->
            <com2 v-on:func="show"></com2>
        </div>
        <template id="tmp1">
            <div>
                <h3>这是子组件</h3>
                <input type="button" value="子组件按钮,调用父组件show方法" @click="myclick">
            </div>
        </template>
        
        <script>
            var com2={
                template:"#tmp1",//通过指定了一个Id,表示要去加载指定Id的template元素中的内容,当作组件的html结构
                data(){
                    return{
                        sonmsg:{name:'lb',age:25}
                    }
                },
                methods:{
                    myclick(){
                        //当单击子组件的按钮,调用父组件的func方法
                        //$emit: 含义是触发、调用的意思
                        //下面自带两个参数,相当于是子组件向主组件传递参数
                        this.$emit('func',123,this.sonmsg)
                    }
                }
            }
            var vm=new Vue({
                el:'#test',
                data:{
                    dataNumFromSon:0,
                    datamsgFromSon:{name:'wq',age:18}
                },
                methods:{        
                    show(data1,data2){
                        this.dataNumFromSon=data1
                        this.datamsgFromSon=data2
                        
                    }
                },
                components:{
                    com2
                }
            })
                
            </script>
        </body>
        </html>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>自定义组件</title>
            <script src="js/vue.min.js"></script>
            <style>
                input:focus{ 
                  background-color:black;
                  color:white;
                }
            </style>
        </head>
        <body>
        <div id="app">
            <p>页面载入时,第二个input 元素自动获取焦点:</p>
            <input  /><br /><br />
            <input v-focus /><br /><br />
            <input >
        </div>
         
        <script>
        new Vue({
          el: '#app',
          directives: {
            // 注册一个局部的自定义指令 v-focus
            focus: {
              // 指令的定义
              inserted: function (el) {
                // 聚焦元素
                el.focus()
                el.value="获得焦点"
              }
            }
          }
        })
        </script>
        </body>
         </html>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>自定义组件</title>
            <script src="js/vue.min.js"></script>
            <style>
                input:focus{ 
                  background-color:black;
                  color:white;
                }
            </style>
        </head>
        <body>
        <div id="app">
            <p>页面载入时,第二个input 元素自动获取焦点:</p>
            <input  /><br /><br />
            <input v-focus /><br /><br />
            <input >
        </div>
         
        <script>
        // 注册一个全局自定义指令 v-focus
        Vue.directive('focus', {
          // 当绑定元素插入到 DOM 中。
          inserted: function (el) {
            // 聚焦元素
            el.focus()
            el.value="获得焦点"
          }
        })
        // 创建根实例
        new Vue({
          el: '#app'
        })
        </script>
        </body>
         </html>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>钩子函数bind的引用</title>
            <script src="js/vue.min.js"></script>
        </head>
        <body>
        <div id="app"  v-runoob:hello.a.b="message">
        </div>
         
        <script>
        Vue.directive('runoob', {
          bind: function (el, binding, vnode) {
            var s = JSON.stringify
            
            el.innerHTML =
              '钩子函数bind中各参数的取值:<br />' +
              '<b>name:</b> '       + s(binding.name) + '<br>' +
              '<b>value:</b> '      + s(binding.value) + '<br>' +
              '<b>expression:</b> ' + s(binding.expression) + '<br>' +
              '<b>argument:</b>'   + s(binding.arg) + '<br>' +
              '<b>modifiers:</b>'  + s(binding.modifiers) + '<br>' +
              '<b>vnode keys:</b>' + Object.keys(vnode).join(', ')
          }
        })
        new Vue({
          el: '#app',
          data: {
            message: 'Hello Vue world!'
          }
        })
        </script>
        </body>
         </html>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>Vue的CSS过渡</title>
            <script src="js/vue.min.js"></script>
            <style>
                
              .v-enter,.v-leave-to{
                  opacity: 0;
                  transform:translateX(180px);
              }
              .v-enter-active,.v-leave-active{
                  transition:all 1s ease;
              }
            </style>
        </head>
        
        <body>
        <div id="app">
            <input type="button" value="显示/隐藏" @click="flag=!flag" />
            <transition>
                <h3 v-if="flag" >{{msg}}</h3>
            </transition>
        </div>
        
         
         
        <script>
        new Vue({
          el: '#app',
          data: {
            msg:'Hello Vue World!' ,
            flag:true
          }
        })
        </script>
        </body>
         </html>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>Vue使用第三方样式类库实现过渡</title>
            <link rel="stylesheet" href="./css/animate.min.css">
            <script src="js/vue.min.js"></script>
        </head>
        <body>
         <div id="test">
            <input type="button" value="togle" @click="flag=!flag" />
            <transition 
              enter-active-class="animated bounceIn" 
              leave-active-class="animated bounceOut"
                :duration={enter:400,leave:200}>
                <h3 v-if="flag">{{msg}}</h3>
            </transition>
         </div>
            
            <script>
                var vm=new Vue({
                    el:'#test',
                    data:{
                        msg:'Hello Vue World!' ,
                        flag:false,
                    }
                });
            </script>
        </body>
        </html>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
        <title>钩子函数实现半场动画</title>
            <style>
                .ball{
                    width:20px;
                    height: 20px;
                    border-radius: 50%;
                    background-color: red;
                }
            </style>
            
        </head>
        <body>
         <div id="test">
             <input type="button" value="start" @click="flag=!flag">
             <transition @before-enter="beforeEnter" @enter="enter" @after-enter="afterEnter">
                 <div class="ball" v-show="flag"></div>
             </transition>
            
         </div>
            <script src="js/vue.min.js"></script>
            <script>
                var vm=new Vue({
                    el:'#test',
                    data:{
                        flag:false
                    },
                    methods:{
                        beforeEnter(el){
                            el.style.transform="translate(50px,50px)"
                        },
                        enter(el,done){
                            el.offsetWidth
                            el.style.transform="translate(150px,450px)"
                            el.style.transition="all 1s ease"
                            
                            //这里的doen(),其实就是afterEnter函数的引用,done表示立即调用afterEnter
                            done()
                        },
                        afterEnter(){
                            this.flag=false
                        }
                    }
                });
            </script>
        </body>
        </html>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
            <script src="js/vue.min.js"></script>
        </head>
        <body>
            <div id="app">
                <input type='radio' name="r1" v-model='tab' value="mycom1">组件1
                <input type='radio' name="r1" v-model='tab' value="mycom2">组件2
                <keep-alive>
                    <component v-bind:is='tab'></component>
                </keep-alive>
            </div>
            <template id="tmp1">
                <h1>{{title}}</h1>
            </template>
            <template id="tmp2">
                <h5>{{title}}</h5>
            </template>
            <script>
                Vue.component('mycom1',{
                    template:'#tmp1',
                    data:function(){
                        return{
                            title:'组件1!!!'
                        }
                    }
                })
                Vue.component('mycom2',{
                    template:'#tmp2',
                    data:function(){
                        return{
                            title:'子组件2!!!'
                        }
                    }
                })
                var vm=new Vue({
                    el:'#app',
                    data:{
                        tab:'mycom1'
                    }
                })
            </script>
        </body>
    </html>
    <!DOCTYPE html>
        <html>
            <head>
                <meta charset="utf-8">
                <title>Vue组件创建方法一</title>
                <script src="js/vue.min.js"></script>
            </head>
            <body>
                <div id="app">
                     <!--调用驼峰方式命名组件-->
                     <my-com></my-com>
                </div>
                <script>
                    var com1 = Vue.extend({
                       template : "<h3>使用vue.extend创建的组件1</h3>"   
                    })
                    //驼峰方式命名组件
                    Vue.component('myCom',com1)
                    var vm=new Vue({
                        el:'#app',
                        data:{
                            },
                    });
                </script>
            </body>
            </html>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
        <title>第一个Vue程序</title>
        <script src="js/vue.min.js"></script>
        </head>
        <body>
                <div id="app">
                    商品名称:<input type="text" name="name" v-model="name" />
                    商品价格:<input type="text" name="price" v-model="price" />
                    <button @click="add()">增加商品</button>
                    <table border="1px">
                        <template v-for="(v,index) in goods">
                            <tr style="background-color: orange;" v-if="index==0">
                                <td v-for="t in title">{{t}}</td>
                            </tr>
                            <tr>
                                <td>{{index+1}}</td>
                                <td>{{v.name}}</td>
                                <td>{{v.price}}</td>
                                <td><button @click="del(index)">删除</span></td>
                            </tr>
                        </template>
                    </table>
                </div>
            </body>
            <script>
                new Vue({
                    el:'#app',
                    data:{
                        title:[
                            '商品序号',
                            '商品名称',
                            '商品价格',
                            '删除商品'
                        ],
                        goods:[
                            {name:'zhangsan',price:'18'},
                            {name:'wmx',price:'20'}
                        ],
                        name:'',
                        price:''
                    },
                    methods:{
                        add:function(){
                            var str = {name:this.name,price:this.price};
                            this.goods.unshift(str);
                        },
                        del:function(i){
                            this.goods.splice(i,1);
                        }
                    }
                });
            </script>
        </html>
        
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
        <title>Vue组件实验</title>
        <script src="js/vue.min.js"></script>
        <link href="css/bootstrap.min.css" rel="stylesheet">
        <style>
            .myTop{
                margin-top: 10px;
            }
            .myLi{
                        margin-top: 10px;
                        
                    }
            ul li span{ cursor: pointer; }
            </style>
            </head>
            <body>
                <div class="container myTop">
                    <div id="app">
                        <div class="form-group">
                            <label>微博内容:</label>
                            <textarea  class="form-control" v-model="msg"></textarea>
                        </div>
                        <div class="form-group">
                            <input type="button" value="发表微博" class="btn btn-primary"
                            @click="add()">
                        </div>
                        
                        <h2>微博列表:</h2>
                        <ul class="list-group">
                            <li  class="list-group-item myLi" v-for="(v,i) in article">
                                <span class="badge" @click="del(i)">删除</span>
                                 {{v}}</p>
                            </li>
                        </ul>
                    </div>
                </div>
            </body>
            <script>
                new Vue({
                    el:'#app',
                    data:{
                        article:[
                                "武汉加油",
                                "中国加油!"
                        ],
                        msg:''
                    },
                    methods:{
                        add:function(){
                            //unshift() 把一个元素添加到数组的开头,并返回数组的新长度。
                            this.article.unshift(this.msg);
                        },
                        del:function(i){
                            //splice() 删除第i个位置后的一个元素
                            this.article.splice(i,1);
                        }
                    }
                });
            </script>
        </html>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
        <title>练习</title>
        <script src="js/vue.min.js"></script>
        </head>
        <body>
            
                <div id="app">
                        <my-hello></my-hello>
                        <my-hello></my-hello>
                </div>
                <template id="tmp">
                        <!-- <template>必须有且只有一个根元素 -->
                        <div>
                            <h3>{{msg}}</h3>
                            <ul>
                                <li v-for="value in arr">{{value}}</li>
                            </ul>
                        </div>
                </template>
                </div>
            </body>
            <script>
                    var vm=new Vue({
                        el:'#app',
                        components:{
                            'my-hello':{
                                name:'lb',  
                                template:'#tmp',
                                data(){
                                    return {
                                        msg:'武汉欢迎您!',
                                        arr:['lb','wq','lyd']
                                    }
                                }
                            }
                            
                        }
                    });    
                </script>
        </html>
        
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
        <title>练习</title>
        <script src="js/vue.min.js"></script>
        <style>
            /* div的初始状态*/
            .box {
                width:100px;
                height: 200px;
                background-color:greenyellow;
            }
                /**
            * 定义进入动画和退出动画的过程
            * 代表关注的是height的变化,动画的时间是5
            */
            .fade-enter-active, .fade-leave-active {
                transition: height 5s;
            }
            /* 定义进入动画的初始状态*/
            .fade-enter {
                height: 0;
            }
        
            /* 定义进入动画的结束状态*/
            .fade-enter-to {
                height: 200px;
            }
        
            /* 定义离开动画的初始状态*/
            .fade-leave {
                height: 200px;
            }
        
            /* 定义离开动画的结束状态*/
            .fade-leave-to {
                height: 0;
            }
        </style>
        </head>
        <body>
            <div id="app">
                <button @click="myBtn">显示/隐藏切换</button>
                <!--一个命名为fade的<transition>标签包裹着类名为h的<div>-->
                <transition name="fade">
                    <div class="box" v-if="show"></div>
                </transition>
            </div>
                
            </body>
            <script>
                    var vm=new Vue({
                        el:'#app',
                        data:{
                            show:true
                        },
                        methods:{
                            myBtn:function(){
                                this.show=!this.show
                            }
                        }
                    });    
                </script>
        </html>
        
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <link href="css/bootstrap.min.css" rel="stylesheet" type="text/css">
        <script src="js/vue.min.js"></script>
        <style>
            #app ul{
                list-style: none;
            }
            #app ul li{
                width: 450px;
            }
            #app ul li ul li{
                float: left;
                width: 30px;
                height: 20px;
                background-color: bisque;
                margin: 5px 10px;
            }
        </style>
    </head>
    
    <body>
        <div id="app">
            <ul>
                <li v-for="(itemRow, indexRow) in 9" :key="indexRow">
                    <ul >
                        <li v-for="(itemCol, indexCol) in 9" :key="indexCol">
                            {{indexRow}}行{{indexCol}}列
                        </li>
                    </ul>
                    <br>
                </li>
    
            </ul>
            你单击了:{{info}}
        </div>
        
    
        <script>
            var vm = new Vue({
                el: "#app",
                data: {
                    info:"hello"
                }
          
           
            });
           
        </script>
    
    </body>
    
    </html>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
            <script src="js/vue.js"></script>
        </head>
        <body>
            <div id="app">
                <mycom></mycom>
                <mycom></mycom>
                <lbcom></lbcom>
        
            </div>
            <template id="temp1">
              <div>
                <input type="button" value="加1" @click="inc">
                <h1>{{count}},hello</h1>
              </div>
            </template>
            <script>
                
                Vue.component('mycom',{
                    template:'#temp1',
                    data:function(){
                        return({count:88})
                    },
                    methods:{
                        inc:function(){
                            this.count++;
                        }
                    }
                })        
                var vm=new Vue({
                    el:'#app',
                    data:{},
                    components:{
                        lbcom:{
                            template:'<h1>hello subComponent</h1>'
                        }
                    }
                })
            </script>
        </body>
    </html>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
            <script src="js/vue.min.js"></script>
        </head>
        <body>
            <div id="app">
                {{msg}}
                <maincomp></maincomp>
            </div>
            <template id="tmp">
                <h1>{{mainmsg}}</h1>
            </template>
            <script>
                Vue.component('maincomp',{
                    template:'#tmp',
                    data:function(){
                        return{
                            mainmsg:'world mainCompontent data'
                        }
                    }
                })
                var vm=new Vue({
                    el:'#app',
                    data:{
                        msg:'hello Main'
                    }
                })
            </script>
        </body>
    </html>
  • 相关阅读:
    CCNA 第二章 以太网回顾
    CCNA 第一章 网络互联
    solidworks中 toolbox调用出现未配置的解决方法
    linux之df命令
    linux之du命令
    linux之pid文件
    linux之mysql启动问题
    linux之使用cron,logrotate管理日志文件
    wordpress(一)wordpress环境的搭建
    phpwind8.7升级9.0.1过程(四)20130207升级到20141228
  • 原文地址:https://www.cnblogs.com/tszr/p/13871365.html
Copyright © 2020-2023  润新知