Я использую Vue компоненты для нескольких входов с разными осями ios URL-адреса и ответы. Затем используйте v-for l oop для отображения ответа, который можно выбрать.
idea :
- Вход 1> Ax ios GET user data
- Вход 2> Ax ios GET color data
- Вход 3> Ax ios GET модель data
et c, каждый ответ Ax ios может иметь различный массив ответов и объекты.
Я могу установить разные адреса Ax ios GET используя props, но как я могу использовать props для определения пути массива v-for и пути объекта?
пример изображения, показывающего необходимую связь между prop и v-for:
Могу ли я использовать реквизиты для определения пути массива и объекта в f-vor l oop? В приведенном ниже примере кода мне нужно использовать опору из компонента, чтобы определить пути к массивам и объектам. примечание: я использую образец ответа топора ios для этой демонстрации.
Vue.component("my-component", {
template: `
<div style="position:absolute"><input :placeholder="this.input_placeholder" @keyup="if(input_value.length > 2 ){ search() }" v-on:blur="input_clear()" v-model="input_value" /><i v-if="loading_spinner" class="fas fa-spinner fa-pulse"></i><div class="supplier_select_popup" v-if="response_popup_show"><div v-for="data,i in response_array.bpi" v-on:click="response_select(i)">{{ data.code }}</div></div></div>`,
props: {
api_url: "",
api_response_path: "",
data_path: "",
},
data: function() {
return {
input_placeholder: "Search",
input_value: "",
selected_value: "",
loading_spinner: false,
response_popup_show: false,
response_array: [],
};
},
methods: {
// Fetch Data
search: function() {
this.response_popup_show = false
this.loading_spinner = true
clearTimeout(this.myVar)
this.myVar = setTimeout(
function() {
axios
.get(
this.api_url
)
.then((response) => {
this.response_array = response.data
console.log(this.response_array)
this.response_popup_show = true
this.loading_spinner = false
})
.catch((error) => {
console.log(error)
this.errored = true;
this.response_popup_show = false
})
.finally(() => (this.loading = false))
}.bind(this),
1000
);
},
// Response Select
response_select: function(i) {
this.input_value = [i]
this.selected_value = [i]
this.response_popup_show = false
},
// Response Clear
input_clear: function() {
var self = this;
setTimeout(function() {
self.response_popup_show = false
self.loading_spinner = false
if (self.selected_value.length != 0) {
self.input_value = self.selected_value
} else {
self.input_value = ""
}
}, 100);
}
}
});
const App = new Vue({
el: "#app",
methods: {}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.19.2/axios.min.js"></script>
<script src="https://kit.fontawesome.com/17cdac82ba.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<my-component class="clickable" api_url="https://api.coindesk.com/v1/bpi/currentprice.json" api_response_path="response_array.bpi" data_path="date.code">
</my-component>
</div>