如何更改vueJs中组件的渲染顺序?

li9yvcax  于 2023-03-03  发布在  Vue.js
关注(0)|答案(3)|浏览(222)

我想用我的父组件中API的数据来重新排序我的子组件。请看下面的例子:
父组件:

<div v-if="data">
    <Component_1 />
    <Component_2 />
    <Component_3 />
    <Component_4 />
  </div>

我想这样渲染与数据从后端和用户可以发送给我一个像WordPress的数据重新排序的组件,每次他想要的:
用户从后端更改订单数据后的父组件:

<div v-if="data">
    <Component_4 />
    <Component_2 />
    <Component_1 />
    <Component_3 />
  </div>

我有办法做到吗,还是在电视上不可能?
我试图使动态组件,但我不能排序他们或我不知道!

xjreopfe

xjreopfe1#

您可以在后端响应数组上循环,并使用:is属性按照数组的条目顺序呈现组件。
这里有一个演示-

const Component_1 = Vue.component('Component_1', {
  template: '<div>Component 1</div>'
})
const Component_2 = Vue.component('Component_2', {
  template: '<div>Component 2</div>'
})
const Component_3 = Vue.component('Component_3', {
  template: '<div>Component 3</div>'
})

new Vue({
  el: "#app",
  data() {
    return {
      response: [1, 2, 3]
    }
  },
  components: {
    Component_1,
    Component_2,
    Component_3
  },
  methods: {
    reorder() {
      // Suppose you get the data in numbers from the backend like
      // [1,2,3] or [2,3,1]
      this.response = [2, 3, 1];
    }
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <button @click="reorder()">Re-order</button>
  <component :is="`Component_${num}`" v-for="(num, i) in response" :key="i"></component>
</div>
t5fffqht

t5fffqht2#

当您从后端以正确的顺序获得一些组件名称数组时:

const componentsOrder = ['Component_4', 'Component_1', 'Component_2', 'Component_3'];

在Vue模板中,您可以使用带有is属性的<component>标签:

<div v-if="data">
  <component 
    v-for="componentName in componentsOrder" 
    :key="componentName" 
    :is="componentName" 
  />
  </div>
xxls0lw8

xxls0lw83#

如果可以对数字进行排序,则可以使用component及其属性is动态呈现组件:

<div v-if="data">
  <template v-for="num in orderedNums">
    <component :is="`Component_${num}`"
 </template>
</div>

相关问题