vue教程:全局组件(非单文件)-给组件传值(动态传值)

提出问题

vue教程:全局组件(非单文件)-给组件传值(静态传值) 中,传值的类型都是字符串类型,无法传数字、布尔、数组类型

解决

通过动态传值解决

动态传值

定义组件

与 vue教程:全局组件(非单文件)-给组件传值(静态传值) 案例相同

// 第一步:定义组件
var goods = {
    template:`
        <div>
            <img :src="img" :width="img_width" >
            <br>
            {{gname}}
            <div v-text="price"></div>
        </div>
    `,
    data: function(){
        return {
        }
    },
    // 从组件的 gname 等属性中获取值
    props:["gname","price","img","img_width"]
}

注册组件

与 vue教程:全局组件(非单文件)-给组件传值(静态传值) 案例相同

// 第二步:注册组件
Vue.component( "jd-goods" , goods )

使用组件

关键: 通过 v-bind 动态传值

<div id="app">
    <jd-goods v-bind:gname="name1" :price="price1" :img="img1" img_width="200"></jd-goods>
</div>

完整代码

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

        <div id="app">
            <jd-goods v-bind:gname="name1" :price="price1" :img="img1" img_width="200"></jd-goods>
        </div>

        <script type="text/javascript">
            // 定义组件

            var goods = {

                template:`

                    <div>
                        <img :src="img" :width="img_width" >
                        <br>
                        {{gname}}
                        <div v-text="price"></div>
                    </div>

                `,
                data: function(){

                    return {
                    }
                },
                // 从组件的 gname 等属性中获取值
                props:["gname","price","img","img_width"]


            }
            //注册组件
            Vue.component( "jd-goods" , goods )


            var vm = new Vue({
                el:'#app',//选择器: id 样式、元素选择器等  但元素选择器不能绑定body html元素
                data:{
                    name1:"小天鹅洗衣机",
                    price1:2000,
                    img1:"img/20231116_133706.png",

                }
           });
        </script>
    </body>
</html>

缺点

这种方式,只能传一个商品的信息,如果要传多个商品信息,就需要定义数组


原文出处:/show_1IX6m2aOXn7c.html