• vue组件


    父访问子children-refs

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
      <script src="./../../../vue.min.js"></script>
    </head>
    <body>
      <div id="app">
            <cpn></cpn>
            <cpn ref="aa"></cpn>
            <cpn></cpn>
            <button @click="btnClick">按钮</button>
      </div>
      <template id="cpn1">
          <div>我是子组件</div>
        </template>
      <script>
        const cpn1=Vue.extend({
          template:"#cpn1",
          methods:{
            showMessage(){
              console.log("showMessage");
              
            }
          },
          data(){
            return{
              name:"我狮子组件的name"
            }
          }
        })
      const app=new Vue({
        el:"#app",
        data:{
         message:"你哈啊"
        },
        methods:{
          btnClick(){
            // console.log(this.$children);
            // for(let c of this.$children){
            //     c.showMessage();
            //     console.log(c.name);
            //   }
           console.log(this.$refs.aa.name)
          }
        },
        components:{
          cpn:cpn1,
        }
      })
      </script>
      
    </body>
    </html>

    子传父

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
      <script src="./../../../vue.min.js"></script>
    </head>
    <body>
    <!-- 父组件模板 -->
      <div id="app">
        <cpn @itemclick="cpnclick"></cpn>
      </div>
    <!-- 子组件模板 -->
    <template id="cpn">
      <div>
       <button v-for="item in categories" @click="btnClick(item)">{{item.name}}</button>
       </div>
    </template>
      <script>
    const cpn={
      template:"#cpn",
      data(){
        return{
          categories:[
            {id:"aaa",name:"热门推荐"},
            {id:"bbb",name:"家用家电"},
            {id:"hhh",name:"电脑办公"},
            {id:"jjj",name:"手机数码"},
          ]
        }
        },
        methods:{
          btnClick(item){
           this.$emit("itemclick",item)
          }
        }
    }
    
    const app=  new Vue({
         el:"#app",
         data:{
           message:"你好啊"
          },
           components:{
             cpn:cpn
           },
           methods:{
             cpnclick(item){
               console.log("阿萨2",item)
             }
           }
         
       })
      </script>
    </body>
    </html>

    子访问父parent-root

    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
      <script src="./../../../vue.min.js"></script>
    </head>
    <body>
      <div id="app">
        <cpn></cpn>
      </div>
    
    <template id="cpn">
    <div>
     <h2>我是cpn组件</h2>
     <cpn1></cpn1>
    </div>
    </template>
    
    
    <template id="cpn1">
        <div>
          <h2>我是一个子组件</h2>
          <button @click="btnclick">按钮</button>
        </div>
      </template>
      
    
    
      <script>
       
        const cpn1=Vue.extend({
          template:"#cpn1",
          methods:{
          btnclick(){
            console.log(this.$root.message)
          }
          }
        })
        const cpn=Vue.extend({
          template:"#cpn",
          components:{
            cpn1:cpn1
          }
        })
      const app=new Vue({
        el:"#app",
        data:{
          message:"你号啊"
        },
        components:{
          cpn:cpn
        }
       
      })
      </script>
    </body>
    </html>

    组件的分离写法

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
      <script src="./../../../vue.min.js"></script>
    </head>
    <body>
      <div id="app">
    <cpn></cpn>
    <cpn></cpn>
    <cpn></cpn>
      </div>
      <!-- 模板第一种写法 -->
      <script type="text/x-template" id="cpn1">
      <div>
        <h2>速递</h2>
        <p>你号</p>
      </div>
      </script>
    <!-- 模板第二种写法 -->
      <template id="cpn2">
        <div>
          <h2>速递</h2>
          <p>按时</p>
        </div>
      </template>
      <script>
        //创建组件构造器对象
        const Cpn=Vue.extend({
          template:"#cpn2"
        })
        //全局组件
        Vue.component("cpn",Cpn)
      new  Vue({
      el:"#app",
      })
      </script>
    </body>
    </html>

    props

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
      <script src="./../../../vue.min.js"></script>
    </head>
    <body>
      <div id="app">
      <cpn v-bind:tmovies="movies" :tmessage="message"></cpn>  
      </div>
    <template id="cpn">
      <div>
        <h2> {{tmovies}} {{tmessage}}</h2>
      </div>
    </template>
      <script>
        const cpn1=Vue.extend({
         template:"#cpn",
         props:{
         tmovies:Array,
         tmessage:{
           type:String,
           default:"aaaa", //绑定v-bind就会显示默认值
           required:true //必传值
         }
         }
         })
      new Vue({
        el:"#app",
        data:{
          message:"nihao",
          movies:['海泽旺','ADAJ','按时']
        },
        components:{
          cpn:cpn1
        }
      })
      </script>
    </body>
    </html>

    watch

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
        <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
    </head>
       <body>
          <div id = "computed_props">
             千米 : <input type = "text" v-model = "kilometers">
             米 : <input type = "text" v-model = "meters">
          </div>
           <p id="info"></p>
          <script type = "text/javascript">
             var vm = new Vue({
                el: '#computed_props',
                data: {
                   kilometers : 0,
                   meters:0
                },
                methods: {
                },
                computed :{
                },
                watch : {
                   kilometers:function(val) {
                      this.kilometers = val;
                      this.meters = this.kilometers * 1000
                   },
                   meters : function (val) {
                      this.kilometers = val/ 1000;
                      this.meters = val;
                   }
                }
             });
             // $watch 是一个实例方法
            vm.$watch('kilometers', function (newValue, oldValue) {
                // 这个回调将在 vm.kilometers 改变后调用
                document.getElementById ("info").innerHTML = "修改前值为: " + oldValue + ",修改后值为: " + newValue;
            })
    </body>
    </html>
  • 相关阅读:
    Java基础00-循环语句7
    Java基础00-分支语句6
    Java基础00-数据输入5
    Java基础00-运算符4
    Java基础00-基础语法3
    Java基础00-第一个程序2
    第十四题
    第十三题
    第十二题
    第十题
  • 原文地址:https://www.cnblogs.com/wxy0715/p/12442639.html
Copyright © 2020-2023  润新知