过滤数组在vue中生成不同的数组
Filter array to generate different arrays in vue
所以我有一个数组,其中包含销售公司中每个人的通知。它们有不同的 idTypes,这取决于它是什么类型的通知。并且有登录的用户,然后是进行销售的用户。有些通知应该只对登录用户可见,有些通知对所有人可见。
notifications: [
0: {
idType: 1
type: "delivered"
user: 12
visibility: true
seller: 15
product: "phone"
}
1: {
idType: 2
type: "meeting"
user: 12
visibility: null
seller: 12
company: "hotell"
}
2: {
idType: 1
type: "invoiced"
user: 15
visibility: null
seller: 11
value: 150000
}
]
因此,如果我是用户:12,我应该只能看到数组中的第一个对象(用户和卖家 ID 相同)。而且我不知道该怎么做。我尝试过不同的计算和方法。
我有一个卡片的小组件,您应该在其中看到卖家的图片(发送 'note' 作为道具):
<div class="d-flex justify-space-between">
<div class="ml-4 d-flex justify-space-between align-center">
<seller :id="note.seller" v-slot="{ seller }">
<user-avatar :src="seller.profileImage" :size="36" class="mr-3 mr-sm-5
ml-n3 ml-sm-0"
/></seller>
<div class="d-flex flex-column">
<h6 class="font-weight-bold">{{ note.title }}</h6>
<slot name="info" />
</div>
</div>
</div>
然后我有一个看起来像这样的组件,我在上面导入了一个组件,因为它在每张卡片中应该有不同的值:
<activity :note="note">
<template #info>
<span v-if="note.idType === 1">
{{ note.type }} {{ note.product }}
</span>
<span v-if="note.idType === 3">
{{ note.type }} for {{ note.value }} $
</span>
</template>
</activity>
然后我将其导入另一个组件以呈现所有不同的通知,这是我访问数组的地方:
<div v-for="(note, idx) in notifications" :key="idx">
<activity
class="white my-3"
:note="note"
/>
</div>
所以我尝试了不同的计算和方法,但似乎没有任何效果。
我知道我需要做一些 if 语句来生成不同的数组。但是我应该用计算还是方法来做呢?最好的方法是什么?我正在使用 javascript/typescript
您只需使用 computed
属性 来减少您的通知。
computed() {
filteredNotifications: function(){
return this.notifications.filter(node => node.seller === this.currentUserId)
},
},
其中currentUserId
是当前用户的id
并在模板内部使用此计算 属性 迭代组件,如下所示
<div v-for="(note, idx) in filteredNotifications" :key="idx">
<activity
class="white my-3"
:note="note"
/>
</div>
所以我有一个数组,其中包含销售公司中每个人的通知。它们有不同的 idTypes,这取决于它是什么类型的通知。并且有登录的用户,然后是进行销售的用户。有些通知应该只对登录用户可见,有些通知对所有人可见。
notifications: [
0: {
idType: 1
type: "delivered"
user: 12
visibility: true
seller: 15
product: "phone"
}
1: {
idType: 2
type: "meeting"
user: 12
visibility: null
seller: 12
company: "hotell"
}
2: {
idType: 1
type: "invoiced"
user: 15
visibility: null
seller: 11
value: 150000
}
]
因此,如果我是用户:12,我应该只能看到数组中的第一个对象(用户和卖家 ID 相同)。而且我不知道该怎么做。我尝试过不同的计算和方法。
我有一个卡片的小组件,您应该在其中看到卖家的图片(发送 'note' 作为道具):
<div class="d-flex justify-space-between">
<div class="ml-4 d-flex justify-space-between align-center">
<seller :id="note.seller" v-slot="{ seller }">
<user-avatar :src="seller.profileImage" :size="36" class="mr-3 mr-sm-5
ml-n3 ml-sm-0"
/></seller>
<div class="d-flex flex-column">
<h6 class="font-weight-bold">{{ note.title }}</h6>
<slot name="info" />
</div>
</div>
</div>
然后我有一个看起来像这样的组件,我在上面导入了一个组件,因为它在每张卡片中应该有不同的值:
<activity :note="note">
<template #info>
<span v-if="note.idType === 1">
{{ note.type }} {{ note.product }}
</span>
<span v-if="note.idType === 3">
{{ note.type }} for {{ note.value }} $
</span>
</template>
</activity>
然后我将其导入另一个组件以呈现所有不同的通知,这是我访问数组的地方:
<div v-for="(note, idx) in notifications" :key="idx">
<activity
class="white my-3"
:note="note"
/>
</div>
所以我尝试了不同的计算和方法,但似乎没有任何效果。
我知道我需要做一些 if 语句来生成不同的数组。但是我应该用计算还是方法来做呢?最好的方法是什么?我正在使用 javascript/typescript
您只需使用 computed
属性 来减少您的通知。
computed() {
filteredNotifications: function(){
return this.notifications.filter(node => node.seller === this.currentUserId)
},
},
其中currentUserId
是当前用户的id
并在模板内部使用此计算 属性 迭代组件,如下所示
<div v-for="(note, idx) in filteredNotifications" :key="idx">
<activity
class="white my-3"
:note="note"
/>
</div>