gpt4 book ai didi

javascript - 将 JS 对象传递给组件 Vue.js

转载 作者:行者123 更新时间:2023-11-28 12:59:54 24 4
gpt4 key购买 nike

我在通过产品组件显示产品时遇到问题。

首先在我的 vue.js 应用程序中,我通过 ajax 加载产品,如下所示:

var app = new Vue({
el: '#app',
data: {
products: [] // will be loaded via Ajax
},
mounted: function () {
var self = this;
ajaxGetProducts(0, self); // ajax, to fetch products
},
methods: {
getProducts: function (event) {
let groupID = Number(document.getElementById("GroupSelect").value);
ajaxGetProducts(groupID, this);
}
}
});

//Ajax call to fetch Products
function ajaxGetProducts(groupID, self) {
$.ajax({
type: "POST",
url: "/Data/GetProducts",
data: { Id: groupID },
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
dataType: "json"
, success: function (response) {
self.products = response; // Loading products into the App instance
},
error: function (jqXHR, textStatus, errorThrown) {
self.products = [];
}
}).done(function () {

});
}

然后我展示这些产品,它工作得很好:

<!-- HTML -->
<div id="app">
<div v-for="prod in products" >{{prod.Id}}</div>
</div>

问题:如果我想使用组件。我怎么做?这是我的组件到目前为止的样子:

Vue.component('product', {
props: [],
template: `<div>ProdID: {{product.Id}} {{product.Qty}}</div>`,
data() {
return {
Id: "test id"
}
}
})

示例产品对象具有以下属性:

{
Id: 1,
Qty: 5,
Title: "Nike shoes",
Price: 200,
Color: "Green"
}

最终我想在 HTML 中使用它,如下所示:

<!-- HTML -->
<div id="app">
<!-- need to pass prod object into product component -->
<div v-for="prod in products" >
<product></product>
</div>
</div>

我知道我必须以某种方式通过组件属性传递对象?逐一传递每个属性并不是一个好主意,因为该产品可能会发生更改,因此属性名称可以更改或添加更多属性。我认为应该有一种方法可以将整个 Product 对象以某种方式传递给 Product 组件,对吗?

最佳答案

您可以通过 props 将信息传递到您的组件

类似这样的东西;

Vue.component('product', {
props: ['item'],
template: `<div>ProdID: {{item.Id}} {{item.Qty}}</div>`
})

并像这样传递它;

<div id="app">
<div v-for="prod in products" :key='prod.Id'>
<product :item='prod'></product>
</div>
</div>

关于javascript - 将 JS 对象传递给组件 Vue.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51629864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com