zoukankan      html  css  js  c++  java
  • vue_组件化开发

    一.基本的组件注册

     1)全局组件注册

    <div id="xxoo"> <button-co></button-co> //自定义的组件 </div>

    <script type="text/javascript" src="../第一天/node_modules/vue/dist/vue.js"></script>
        <script type="text/javascript">
            Vue.component("button-co", {       //button-co 是组件名称  随便起
                data: function () {
                    return {                         //data是组件数据
                        count: 0
                    }
                },
                template: "<button @click='count++'>点击了{{count}}次</button>"   //template组件模板内容
            })
            var pp = new Vue({
                el: "#xxoo",
                data: {
                },
                methods: {
                },
            })
        </script>

    ~~组件注册注意事项

      (1)data必须是一个函数

      (2)组件模板内容必须是单个跟元素,要有父元素,可以加个div就行,都是兄弟元素会报错

      (3)组件模板内容可以是模板字符串

     (4)如果使用驼峰命名法命名组件,那么在使用组件的时候,只能在字符串模板中用驼峰的方式使用组件,但是在普通的标签模板中,必须使用短横线的方式使用组件

      

     全局组件模板样式

    Vue.component(组件名称,{
    
        data:组件数据,      
        template:组件模板内容
    
    })

      2).局部的组件注册

       <div id="xxoo">
            <!-- 局部组件 -->
            <hello-world></hello-world>
            <hello-poter></hello-poter>
            <hello-jerry></hello-jerry>   
        </div>
        <script type="text/javascript" src="../第一天/node_modules/vue/dist/vue.js"></script>
        <script type="text/javascript">
        var HelloWorld ={
            data:function(){
                return {
                    msg:"HelloWorld"
                }
            },
            template:`
                <div>{{msg}}</div>
            `,
        }
        var HelloPoter ={
            data:function(){
                return {
                    msg:"HelloPoter"
                }
            },
            template:`
                <div>{{msg}}</div>
            `,
        }
        var HelloJerry ={
            data:function(){
                return {
                    msg:"HelloJerry"
                }
            },
            template:`
            
                <div>{{msg}}</div>
            `,
        }
        var pp = new Vue({
    
            el:"#xxoo",
            data:{
            },
            components:{
                "hello-world":HelloWorld,
                "hello-poter":HelloPoter,
                "hello-jerry":HelloJerry,
            }
        })
        </script>
       局部组件需要注意:  局部组件只能在注册他的父组件中使用

    二.VUE调试工具

    三.组件间数据交互

      (1)父组件向子组件传值

      -----1`组件内部通过props接收传递过来的值

    Vue.component("div-item",{
    
    props:["title"],        //通过props接收传递过来的值(用在template中)
    
    template:"<div>{{title}}</div>"
    
    })

      -----2`父组件通过属性将值传递给子组件 (两种方式)

    第一种写死的静态方式 :       <div-item title="来自父组件的数据"></div-item>    
    第二种data中的动态属性方式:  <div-item :title="title"></div-item>    //"title"在new Vue 的data中

    示例:

        <div id="xxoo">
            <div>{{msgf}}</div>
            <div-item title="来自父组件中的值" content="hello">{{msg}}</div-item>
            <div-item :title="ptitle" content="hello">{{msg}}</div-item>    
            <!-- 动态绑定属性   ptitle是vue中data的值  -->
        </div>
        <script  type="text/javascript" src="../node_modules/vue/dist/vue.js"></script>
        <script type="text/javascript">
    
            Vue.component("div-item",{
                data:function(){
                    return {
                        msg:"子组件本身的数据",
                    }
                },
                props:["title","content"],      //通过props 接收传递过来的值
                template:`
                    <div>
                    {{msg +"-----" +title + "----" +content}}
                    </div>
                `,
            })
            var pp = new Vue({
                el:"#xxoo",
                data:{
                    msgf:"父组件中的数据",
                    ptitle:"动态绑定属性"
                },
                methods:{
    
                },
            })
        </script>

      注:数据传输时props的数据传输规则:

      `在正常的html模板中 也就是正常的html5中 不能用驼峰命名法,要用横线-形式分割  如 

      `在字符串模板中没有这个限制

    <div-alem menu-title = "hello"></div-alem>       //要用横线-分隔   表达Vue.component 中 props 的menuTitle
    Vue.component("div-alem",{
       
         props:["meunTitle"],
         template:"<div>{{menuTitle}}"</div>          //在javascript中是驼峰式的
    })

      (1)子组件向父组件传值

        props传递数据原则:单项数据流

     

         ~~~(1)父组件监听子组件的事件
          ~~~(2)子组件通过自定义事件向父组件传递信息
          在Vue中,当父组件向子组件传递数据之后,子组件应该不能直接修改父组件传递的数据(单向数据流)

          当我们修改父组件传递过来的普通类型的数据时,Vue会报错
          当我们修改父组件传递过来的对象的属性的时候,是可以进行修改的,也不会报错,也不违反单向数据流
          当我们对父组件传递过来的数组进行元素操作的时候,也可以进行操作,也不会报错

          结论:如果希望子组件可以更改到父组件中的数据,可以考虑传递一个对象或者数组,此时修改对象的属性,或者操作数组中的元素会直接影响到父组件中的数据


       <div id="xxoo">
            <div :style="{fontSize:fontSize + 'px'}">{{pmasg}}</div>      
            <div-one :msg11="msg1" @enlarge-text="handle"></div-one>     //父组件监听子组件的事件
        </div>
        <script type="text/javascript" src="../第一天/node_modules/vue/dist/vue.js"></script>
        <script type="text/javascript">
            Vue.component("div-one", {
                data: function () {
                    return {
                    }
                },
                props: ["msg11"],
                template: `
                <div>
            <div :key="index" v-for="(item,index) in msg11">{{item}}</div>
            <button @click='msg11.push("123")'>点击</button>
            <button @click="$emit('enlarge-text')">扩大父组件中字体大小</button>    //子组件通过自定义事件向父组件传递信息 
            </div>
            `,
            })
            var pp = new Vue({
                el: "#xxoo",
                data: {
                    pmasg:"父组件中内容!",
                    fontSize:10,
                    msg1: [
                       "超越",
                ]
                },
                methods: {
                    handle:function(){
                        var n =0;
                        console.log(this.fontSize)
                        this.fontSize += 5; 
                                   console.log(n)
                    }
                },
            })
        </script>

      

  • 相关阅读:
    Java byte类型转换成int类型时需要 & 0XFF的原因
    Java 原码 反码 补码
    HTTP 响应头信息(Http Response Header) Content-Length 和 Transfer-Encoding
    [No0000E6]C# 判断与循环
    [No0000E5]C# 运算符
    [No0000E3]C# 数据类型
    [No0000E2]Vmware虚拟机安装 苹果系统 mac OS 10.12
    [No0000E1]C# 关键字
    [No0000E0]批量打开当前路径下的文件
    [No0000DF]C# ZipFileHelper ZIP类型操作,压缩解压 ZIP 类封装
  • 原文地址:https://www.cnblogs.com/wsm777/p/13600510.html
Copyright © 2011-2022 走看看