zoukankan      html  css  js  c++  java
  • vue3 prop

    Prop是由父组件传递数据到子组件

    1.通过props数组传递数据

    复制代码
       <div id="vm">
        <blog-t title="标题" subtitle='副标题'></blog-t>
        </div>
        <script>
            const app = Vue.createApp({});
            app.component('blog-t',{
                props:['title','subtitle'],
                template: `<h4>{{ title }}</h4><br>{{subtitle}}`
            });
            const vm = app.mount('#vm');
        </script>
    复制代码

     2.父向子传递数据

    复制代码
        <div id="vm">
            <button-a :title='title'></button-a>
        </div>
        <script type="module">
            import * as obj from './main.js'
            const app = Vue.createApp({
                data() {
                    return {
                        title:'abcd'
                    }
                }
            });
            app.component('button-a', obj.btn1)
            const vm = app.mount('#vm');
        </script>
    复制代码

    main.js 

    const btn1 = {
                props:['title'],
                template: `<button>{{title}}</button>` 
            }
    export {btn1}

    3.为Prop指定类型

        <div id="vm">
            <blog-t title="标题" subtitle='副标题'></blog-t>
        </div>
        <script>
            const app = Vue.createApp({});
            app.component('blog-t', {
                props: {
                    'title': String,
                    //会警告错误
                    'subtitle': Number
                },
                template: `<h4>{{ title }}</h4><br>{{subtitle}}`
            });
            const vm = app.mount('#vm');
        </script>

     4.向子组件传递其他类型

    (1) int 类型

    传静态数字类型:使用v-bind

        <div id="vm">
            <button-a :title='10'></button-a>
        </div>
        <script type="module">
            import * as obj from './main.js'
            const app = Vue.createApp({
                // data() {
                //     return {
                //         title:'abcd'
                //     }
                // }
            });
            app.component('button-a', obj.btn1)
            const vm = app.mount('#vm');
        </script>
    
    ////////////////// main.js /////////////
    
    const btn1 = {
        props:['title'],
        template: `<button>{{ typeof title}}</button>` 
    }
    export {btn1}

    传动态数据类型:

        <div id="vm">
            <button-a :title='title'></button-a>
        </div>
        <script type="module">
            import * as obj from './main.js'
            const app = Vue.createApp({
                data() {
                    return {
                        title:10
                    }
                }
            });
            app.component('button-a', obj.btn1)
            const vm = app.mount('#vm');
        </script>
    
    
    /////////////////main.js  ///////
    同上

    (2)bool

    传静态数据类型: 

        <div id="vm">
            <button-a :title="true"></button-a>
        </div>
        <script type="module">
            import * as obj from './main.js'
            const app = Vue.createApp({
            });
            app.component('button-a', obj.btn1)
            const vm = app.mount('#vm');
        </script>

    传动态

        <div id="vm">
            <button-a :title="title"></button-a>
        </div>
        <script type="module">
            import * as obj from './main.js'
            const app = Vue.createApp({
                data() {
                    return {
                        title:true
                    }
                }
            });
            app.component('button-a', obj.btn1)
            const vm = app.mount('#vm');
        </script>

    (3)数组

    静态

       <div id="vm">
            <button-a :title="[234, 266, 273]"></button-a>
        </div>
        <script type="module">
            import * as obj from './main.js'
            const app = Vue.createApp({
            });
            app.component('button-a', obj.btn1)
            const vm = app.mount('#vm');
        </script>
    
    /////////////////////main.js////////////
    const btn1 = {
        props:['title'],
        template: `<button>{{ title.constructor == Array}}</button>` 
    }
    export {btn1}

    动态

        <div id="vm">
            <!--一直默认为ture-->
            <!-- <button-a title></button-a> -->
            <button-a :title="title"></button-a>
        </div>
        <script type="module">
            import * as obj from './main.js'
            const app = Vue.createApp({
                data() {
                    return {
                        title:[234, 266, 273]
                    }
                }
            });
            app.component('button-a', obj.btn1)
            const vm = app.mount('#vm');
        </script>

    (4)对象

    静态

        <div id="vm">
            <button-a :title="{a:10}"></button-a>
        </div>
        <script type="module">
            import * as obj from './main.js'
            const app = Vue.createApp({
            });
            app.component('button-a', obj.btn1)
            const vm = app.mount('#vm');
        </script>
    ////////////////////main.js////////////////////
    const btn1 = {
        props:['title'],
        template: `<button>{{ title.constructor == Object}}</button>` 
    }
    export {btn1}

    动态

        <div id="vm">
            <button-a :title="title"></button-a>
        </div>
        <script type="module">
            import * as obj from './main.js'
            const app = Vue.createApp({
                data() {
                    return {
                        title:{a:10}
                    }
                }
            });
            app.component('button-a', obj.btn1)
            const vm = app.mount('#vm');
        </script>

    5.prop验证

        <div id="vm">
            <button-a :propa='propa' :propb='propb' :propc='propc' :propf='propf' ></button-a>
        </div>
        <script type="module">
            import * as obj from './main.js'
            const app = Vue.createApp({
                data() {
                    return {
                        propa: 10,
                        propb: 'bbb',
                        propc: 'ccc',
                        // prope: {
                        //     id: 1,
                        //     title: null
                        // }
                        propf:'success',
                        //propg:function(){ return 'function'}
                    }
                }
            });
            app.component('button-a', obj.btn1)
            const vm = app.mount('#vm');
        </script>

    main.js

    const btn1 = {
        props: {
            //基础类型检查
            propa: Number,
            //接受多种类型
            propb: [String, Number],
            // //必填
            propc: {
                type: String,
                required: true
            },
            //带默认值
            propd: {
                type: String,
                default: 'ddd'
            },
            //带默认值的对象
            prope: {
                type: Object,
                default: function () {
                    return { id: 10, title: 'hello' }
                }
            },
            // 自定义验证函数
            propf:{
                validator: function(value) {
                    // 这个值必须匹配下列字符串中的一个
                    return ['success', 'warning', 'danger'].indexOf(value) !== -1
                  }
            },
            // 具有默认值的函数
            propg:{
                type: Function,
                // 与对象或数组默认值不同,这不是一个工厂函数 —— 这是一个用作默认值的函数
                default: function() {
                  return 'Default function'
                }
            }
        },
        template: `<button>{{ typeof propa }},{{propd}},{{prope.title}},{{propf}},{{propg()}}</button>`
    }
    export { btn1 }
  • 相关阅读:
    svn导出文件夹到另外目录export
    关键词提取自动摘要相关开源项目,自动化seo
    高级前端面试题,部分答案待补充
    三句话感受一本书,让脑子变聪明的7本书,每本只需理解3句话!
    关于系统设置分辨率比例影响到网页宽度大小的问题
    QQ在线客服,默认到要加好友,授权也不起作用需要先开通QQ营销服务
    网络营销相关缩写名称CPM CPT CPC CPA CPS SEM SEO解析
    让nodepad++编辑时链接能双击打开
    工作是一种修行,工作本身,就是一种修行(深度好文)
    foxmail收取163企业邮箱设置,不能直接用foxmail默认的配置,否则一直提示帐号密码错误
  • 原文地址:https://www.cnblogs.com/buchizaodian/p/14898363.html
Copyright © 2011-2022 走看看