javascript - Vue:访问嵌套对象组件的值
问题描述
我在访问组件上的这个“名称”属性时遇到问题。我只能静态访问它。
<template>
<div class="col-md-12">
<p
v-for="channel in channels"
:key="channel.id"
class="channel"
:class="{ 'active': channel.id == activeChannel }"
@click="setChannel(channel.id)">
{{ channel.users[0].name }}
</p>
</div>
</template>
所以我在频道上有一个 v-for 循环,我想: 访问每个频道的用户名(如果它不是我自己最好的,因为“用户名”是我自己设置的,我认为很容易排除它吗?)所以最后在 Channel 1 有 2 个用户时,我想显示相应的用户名,所以“其他用户名”,我正在与之聊天的那个,他应该看到我的名字,这是最初的目标。
我想过做这样的事情:
<template>
<div class="col-md-12">
<p
v-for="channel in channels"
:key="channel.id"
class="channel"
:class="{ 'active': channel.id == activeChannel }"
@click="setChannel(channel.id)">
<!-- {{ channel.users[0].name }} -->
<span v-for="user,key in channel">{{key}}</span>
</p>
</div>
它至少显示了每个频道的频道对象的内容,但是这样的东西是行不通的:key.user.name,不幸的是我卡在这里。请帮忙 :)
编辑:这是视图的 dd()
单击 编辑 2:提供的父数据:
//chat-app.blade.php
<div id="app">
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading">Chats</div>
<vue-chat :channels="{{ $channels }}" ></vue-chat>
</div>
</div>
</div>
</div>
</div>
</div>
//<vue-chat> component
<template>
<div class="chat">
<div class="container">
<div class="row">
<div class="col-md-3">
<vue-chat-channels
:channels="channels"
:active-channel="activeChannel"
@channelChanged="onChannelChanged"
:username="sername"
></vue-chat-channels>
</div>
<div class="col-md-3">
<vue-chat-messages :messages="messages"></vue-chat-messages>
</div>
<div class="col-md-3">participants</div>
</div>
<div class="message-input-wrapper col-md-12"><vue-chat-new-message :active-channel="activeChannel"
:username="username"></vue-chat-new-message></div>
</div>
</div>
</template>
<script>
export default {
props: ["channels"],
data() {
return {
activeChannel: this.channels[0].id,
messages: [],
username: ''
};
},
methods: {
fetchMessages() {
let endpoint = `/channels/${this.activeChannel}/messages`;
axios.get(endpoint).then(({ data }) => {
this.messages = data;
});
},
onChannelChanged(id) {
this.activeChannel = id;
this.fetchMessages();
}
},
created() {
this.fetchMessages();
axios.get('/userfetch').then( ({data}) => {
console.log("Current User: "+data.name);
this.username = data.name;
});
console.log(this.channels[0].name);
// for (let channel of this.channels) {
this.channels.forEach(channel => {
// Channelname
window.Echo.channel('presence-'+channel.name)
.listen('MessageSent', (channel) => {
console.log(channel.data.message);
this.messages.push({ message: channel.data.message, author_username: channel.data.author_username});
if (this.activeChannel == channel.id) {
console.log("received message");
}
});
});
}
};
</script>
<style>
</style>
//ChatController.php
public function index()
{
$channels = Channel::with('users')->whereHas('users', function($q) {
$q->where('user_id',Auth::id());
})->get();
$user = Auth::user()->name;
return view('chat-app' , compact('channels','user'));
}
简短说明:ChatController 返回具有数据通道和用户(我的用户名)的刀片视图,然后 vue 开始发挥作用,它应该传递我的用户名的道具,但我还不能让它工作
解决方案
因此,您需要访问每个渠道中的用户。
你可以这样尝试:
<div class="col-md-12">
<p
v-for="channel in channels"
:key="channel.id"
class="channel"
:class="{ 'active': channel.id == activeChannel }"
@click="setChannel(channel.id)">
<span v-for="user in channel.users">
{{ user.name }}
</span>
</p>
</div>
这应该有效。如果您有错误,请在此处提供。
如果您需要比较每一个user
,您可以简单地使用v-if
:
<span v-for="user in channel.users">
<span v-if="user.name === parentdata">
{{ user.name }}
</span>
</span>
推荐阅读
- r - ggplot2 用于具有两个相同刻度标签的条形图
- javascript - 服务器和客户端中的类名水合不匹配,(警告:Prop `className` 与服务器和客户端不匹配)
- cassandra - 将 DNS 故障转移用作多 DC 故障转移策略吗?
- java - 忽略类型类
- javascript - 过去滚动时使元素固定
- automated-tests - 在 Microsoft Dynamics AX 2009 上进行自动化测试?
- javascript - Html javascript提交不同的表单相同的数据类型,2个按钮
- java - 从文本文件读入并行 Java 数组
- optimization - Z3 支持三角函数(例如:cos、tan)
- c# - 根据配置有条件地返回带有 Locator.CurrentMutable.Register 的对象?