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.component( "jd-goods" , goods )

定义数据

创建 vue 对象时,指定 数组类型 的数据,该数组的元素是 {} 对象,对象封装的是 商品信息

如下:

var vm = new Vue({
    el:'#app',
    data:{
        goods:[
            {
                name:"小天鹅洗衣机",
                price:2000,
                img:"img/20231116_133706.png",
            },
            {
                name:"逻辑",
                price:5000,
                img:"img/iphone.jpg",
            },
            {
                name:"蝰蛇",
                price:3000,
                img:"img/mouse.jpg",
            },
        ]
    }
});

使用组件

关键: 在组件中使用 v-for 指令,遍历数组中的数据,同时给组件传值

<div id="app">
    <jd-goods v-for="(item,index) in goods" :key="index" v-bind:gname="item.name" :price="item.price" :img="item.img" 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-for="(item,index) in goods" :key="index" v-bind:gname="item.name" :price="item.price" :img="item.img" 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:{
                goods:[
                    {
                        name:"小天鹅洗衣机",
                        price:2000,
                        img:"img/20231116_133706.png",
                    },
                    {
                        name:"逻辑",
                        price:5000,
                        img:"img/iphone.jpg",
                    },
                    {
                        name:"蝰蛇",
                        price:3000,
                        img:"img/mouse.jpg",
                    },
                ]
            }
        });
    </script>
    </body>
</html>

原文出处:/show_1IX6m2jSvXdm.html