Vue.js getting initials from name and surname to display in avatar

Viewed 1060

I have a vuetify autocomplete that searches a list of all users which I then create a new separate list of speakers from:

<v-autocomplete
  v-model="user"
  :items="usersData"
  label="Search"
  :search-input.sync="searchUser"
  item-value="id"
  item-text="name"
  return-object
/>

I am trying to setup a speakerInitials method which should take the first chars from the user's name and surname to display in the avatar:

<v-list-item
  v-for="speaker in speakers"
  :key="speaker.id"
>
  <v-avatar
    size="48"
  >
    <span
      class="white--text"
    >
      {{ speakerInitials() }}
    </span>
  </v-avatar>
  <v-list-item-content>
    <v-list-item-title>
      <h6>{{ speaker.name }}</h6> ...
   

I am passing speaker to a method in hope to get the initials but currently I get nothing back + no errors. Is there something I am doing incorrectly here?

data () => ({
  user: {},
  speaker {},
  searchUser: null,
  userRole: '',
  speakers: []
}),
computed: {
  ...mapState({
    users: state => state.users
  }),
  usersData () {
    return this.users.map(user => {
      return {
        name: user.name,
        uid: user.uid
      }
    })
  }
},
methods: {
  speakerInitials (speaker) {
    if (!speaker) return
    const name = speaker.user.name.split(' ')
    return `${name[0].charAt(0)}${name[1] ? name[1].charAt(0) : ''}`
  }
}
1 Answers

You aren't passing the speaker object as an argument to the method:

{{ speakerInitials(speaker) }}

Small demo:

new Vue({
  el: "#app",
  data() {
    return {
      speakers: [
        { id: 1, user: { name: 'Frodo Baggins' }},   // FB
        { id: 2, user: { name: 'Samwise Gamgee' }},  // SG
        { id: 3, user: { name: 'Peregrin Took' }},   // PT
        { id: 4, user: { name: 'Gandalf' }},         // G
      ]
    }
  },
  methods: {
    speakerInitials(speaker) {
      const name = speaker.user.name.split(' ')
      return `${name[0].charAt(0)}${name[1] ? name[1].charAt(0) : ''}`;
    }
  }
});
<div id="app">
  <div v-for="speaker in speakers" :key="speaker.id">
    {{ speakerInitials(speaker) }}
  </div>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

Related