Vue implementiert Chat-Schnittstelle

Vue implementiert Chat-Schnittstelle

In diesem Artikelbeispiel wird der spezifische Code von Vue zur Realisierung der Anzeige der Chat-Oberfläche zu Ihrer Information geteilt. Der spezifische Inhalt ist wie folgt

1. Funktionale Anforderungen

Wählen Sie aus, mit welchen Personen Sie chatten möchten, basierend auf dem Index

2. Codeanzeige

:

Mock von „mockjs“ importieren
Mock.mock("/chatchild",{
    'Ergebnis':[
        {
            ID: "001",
            imgurl:"/static/bild/10.jpg",
            Name:"XKDK",
            Datum: "09:23",
            Worte: „Haha, ok“
        },
        // ... ...
    ]
});
Standard-Mock exportieren

Benutzerinfo.js:

let usermsg = {
    ID: "122",
    imgurl:"/static/bild/8.jpg",
    Worte:"Ja!",
    Daten:{
        ID: "1529",
        imgurl:"/static/bild/7.jpg",
        Name:"Yi An Jushi",
        Wörter:[
            {info:"Bist du da?"},
            {info:"Nicht in"},
            {info:"Haben Sie den Entwurf abgeschickt?"},
            {info:"Ich schaue seit heute Mittag Fernsehserien"},
            {info:"Ich habe herausgefunden, dass ich eigentlich ein Stubenhocker bin"},
            {info:"Hahaha"},
            {info:"Lass uns zusammen essen gehen, wenn ich Zeit habe"},
            {info:"hmm"},
            {info:"Es wird sowieso keine großen Auswirkungen haben"}
        ]
    }
}
Standard-Benutzernachricht exportieren

Die folgende Datei wird im folgenden Beispiel angezeigt:

Vue von „vue“ importieren
Router von „vue-router“ importieren
Chat aus „../components/Chat.vue“ importieren
ChatDetail aus „../components/Pages/ChatDetail.vue“ importieren

Vue.use(Router)

exportiere standardmäßig einen neuen Router({
  Routen: [
    {
      Pfad: '/Chat ',
      Komponente: Chat 
    },
    {
      Pfad: '/ChatDetail',
      Komponente:ChatDetail
    }
  ]
})

// Code zum Beheben von Routing-Fehlern const originalPush = Router.prototype.push
Router.prototype.push = Funktion Push(Standort) {
    gebe originalPush.call(diesen, Standort).catch(err => err) zurück
}

Chat.vue:

<Vorlage>
  <div id="chat">
    <Unten />
    <Header:name="Nachricht" />
    <div Klasse="chat_alluser">
      <div ref="Chatbenutzer" @click="checkChild(index)" class="Chatbenutzer" v-for="(Element,Index) im Chat" :Schlüssel="Index">
        <ChatChild :imgsrc="item.imgurl" :nickname="item.name" :time="item.date" :word="item.words" />
      </div>
    </div>
  </div>
</Vorlage>

<Skript>
importiere Bottom aus "../components/Menu/Bottom";
Header aus "../components/Menu/Header" importieren;
ChatChild aus "../components/Pages/ChatChild" importieren;
Standard exportieren {
  Name: "Chat",
  Komponenten:
    Unten: Unten,
    Kopfzeile: Kopfzeile,
    ChatChild: ChatChild
  },
  Daten() {
    zurückkehren {
      Nachricht: „WeChat“,
      Chat: null,
      Name: null
    };
  },
  montiert() {
    dies.$axios.get("/chatchild").then(res => {
      dieser.chat = res.data.result;
    });
  },
  Methoden: {
    checkChild(index) {
      dies.$refs.chatuser[index].style.backgroundColor = "rgb(240,240,240)";
      // Nachdem das Rendern des dynamischen DOM-Elements abgeschlossen ist, zu einer anderen Schnittstelle springen (ChatDetail)
      // Den dynamischen Namen abrufen
      lass Benutzername = this.chat[index].name;
      dies.$nextTick(() => {
        dies.$router.push({
          Pfad: "/ChatDetail",
          Abfrage: { Name: Benutzername }
        });
      });
    }
  }
};
</Skript>

<style lang="scss" scope>
#chat {
  Breite: 100 %;
  .chat_alluser {
    Rand unten: 7,5rem;
    .chatuser {
      Position: relativ;
      oben: 3,5rem;
      Polsterung: 0,3rem 0;
    }
  }
}
</Stil>

Die übergeordnete Komponente verwendet die Eigenschaften und Methoden der untergeordneten Komponente:
Definieren Sie ein Ref-Attribut für eine untergeordnete Komponente in einer übergeordneten Komponente mithilfe des this.$refs.name.-Attributs oder der this.$refs.name.-Methode.

ChatChild.vue:

<Vorlage>
  <div id="chatchild">
    <div Klasse="Foto">
      <img :src="imgsrc" alt />
    </div>
    <div Klasse="Inhalt">
      <div>
          <span class="content_nickname">{{Spitzname}}</span>
          <span class="content_time">{{Zeit}}</span>
      </div>
      <span class="content_word">{{Wort}}</span>
    </div>
  </div>
</Vorlage>

<Skript>
Standard exportieren {
  Name: "ChatChild",
  Requisiten:{
    'imgsrc':Zeichenfolge,
    'Spitzname':Zeichenfolge,
    'Zeit':Zeichenfolge,
    "Wort":Zeichenfolge
  }
};
</Skript>

<style lang="scss" scope>
#chatkind {
  Breite: 100 %;
  Höhe: 5rem;
  Anzeige: Flex;
  Flex-Richtung: Reihe;
  Box-Größe: Rahmenbox;
  .Foto {
    biegen: 1;
    Höhe: 5rem;
    img{
        Objekt-Passung: Abdeckung;
        Breite: 4rem;
        Höhe: 4rem;
        Rahmenradius: 5px;
        Anzeige: Block;
        Rand: 0 automatisch;
        Rand oben: 0,5rem;
        Rand links: 1rem;
    }
  }
  .Inhalt {
    Flexibilität: 4;
    Höhe: 5rem;
    Rahmen unten: 0,5px durchgezogenes RGB (240, 240, 240);
    Polsterung links: 0,5rem;
    Polsterung oben: 0,5rem;
    Box-Größe: Rahmenbox;
    div{
      .inhalt_nickname{
        Anzeige: Inline-Block;
        Schriftgröße: 1,1rem;
        Rand oben: 0,3rem;
      }
      .inhalt_zeit{
        schweben: rechts;
        Rand rechts: 1rem;
        Farbe: RGB (209, 206, 206);
        Schriftgröße: 0,8rem;
      }
    }
    .Inhaltswort{
      Farbe: RGB (209, 206, 206);
      Schriftgröße: 0,8rem;
      Anzeige: Block;
      Rand oben: 0,5rem;
    }
  }
}
</Stil>

ChatDetail.vue:

<Vorlage>
  <div id="chatdetail">
    <div Klasse="chattop">
      <div @click="zurückgehen" class="chattop_back">
        <icon-svg icon-class="houtui_shangyibu_zuojiantou_shangyiye" />
      </div>
      <div Klasse = "Chattop_Name">{{Name}}</div>
      <div Klasse="chattop_more">
        <icon-svg icon-class="gengduo" />
      </div>
    </div>
    <div Klasse="Chatinhalt">
      <ChatMsg ref="chatmsg" />
    </div>
    <div Klasse="Chatfußzeile">
      <div @click="changeSound">
        <icon-svg:icon-class="istsound" />
      </div>
      <div>
        <input ref="sendcontent" @keypress="sendmsg" :type="istype" :value="isvalue" />
      </div>
      <div>
        <icon-svg icon-class="biaoqing" />
      </div>
      <div>
        <icon-svg icon-class="del" />
      </div>
    </div>
  </div>
</Vorlage>

<Skript>
ChatMsg aus "./ChatMsg" importieren;
Standard exportieren {
  Name: "ChatDetail",
  Daten() {
    zurückkehren {
      Name: null,
      issound: "xiaoxitongzhi",
      istype: "Text",
      istWert: "",
      isshow: falsch,
      tomsg: "",
      msgchild: null
    };
  },
  Komponenten:
    Chatnachricht: Chatnachricht
  },
  montiert() {
    dieser.name = dies.$route.query.name;
    dies.msgchild = dies.$refs.chatmsg;
  },
  Methoden: {
    // Führe die Return-Operation aus goback() {
      dies.$router.go(-1);
    },
    // Eingabetyp wechseln changeSound() {
      // Definieren Sie eine Variable isshow:false in den Daten und verwenden Sie this.isshow und !this.isshow zum Wechseln, wenn (!this.isshow) {
        dies.isshow = wahr;
        dies.issound = "yuyin";
        this.istype = "Schaltfläche";
        this.isvalue = "Zum Sprechen gedrückt halten";
      } anders {
        dies.isshow = falsch;
        dies.issound = "xiaoxitongzhi";
        this.istype = "Text";
        dies.istWert = "";
      }
    },
    // Nachricht senden sendmsg(e) {
      // 1. Verwenden Sie ref, um das Eingabetextfeld für die Eingabe des Antwortinhalts zu definieren, und definieren Sie die Variable sendcontent, um ihren Wert (den Eingabeinhalt) zu erhalten.
      Lassen Sie sendcontent = this.$refs.sendcontent.value;
      wenn (e.keyCode === 13 && sendcontent.split(" ").join("").length !== 0) {
        // 2. Verwenden Sie tomsg, um den Sendcontent (den im Textfeld eingegebenen Wert) in der ChatDetail-Komponente (übergeordnet) zu empfangen. this.tomsg = sendcontent;
        // 3. Definieren Sie die ChatMsg-Komponente (untergeordnet) mit ref und verwenden Sie $refs, um sie in gemounteter Form abzurufen, d. h. this.msgchild
        // 4. Rufen Sie die Methode in der untergeordneten Komponente auf und übergeben Sie tomsg an die (untergeordnete) ChatMsg-Komponente (spezifischer Chat-Inhalt) this.msgchild.saveMsg(this.tomsg);
        // 5. Nachdem Sie eine Nachricht gesendet haben, müssen Sie das Textfeld this.$refs.sendcontent.value = "" löschen;
        // Wenn Sie die Eingabetaste drücken, rufen Sie die Zufallsnachrichtenmethode der untergeordneten Komponente this.msgchild.randomMsg() auf.
      }
    }
  }
};
</Skript>

<style lang="scss" scope>
#chatdetail {
  Position: relativ;
  Hintergrundfarbe: rgb(238, 212, 238);
  .chattop {
    Position: fest;
    oben: 0;
    links: 0;
    Z-Index: 10;
    Breite: 100 %;
    Höhe: 3,5rem;
    Zeilenhöhe: 3,5rem;
    Hintergrundfarbe: rgb(240, 240, 240) !wichtig;
    Anzeige: Flex;
    Flex-Richtung: Reihe;
    .chattop_back {
      biegen: 1;
      Rand links: 1rem;
    }
    .chattop_name {
      Flexibilität: 20;
      Textausrichtung: zentriert;
    }
    .chattop_mehr {
      biegen: 1;
      Rand rechts: 1rem;
    }
  }
  .chatinhalt {
    Breite: 100 %;
    Höhe: 100%;
  }
  .chatfooter {
    Position: fest;
    links: 0;
    unten: 0;
    Z-Index: 10;
    Breite: 100 %;
    Höhe: 3,5rem;
    Zeilenhöhe: 3,5rem;
    Textausrichtung: zentriert;
    Hintergrundfarbe: rgb(240, 240, 240) !wichtig;
    Anzeige: Flex;
    Flex-Richtung: Reihe;
    div:n-tes-Kind(1),
    div:n-tes-Kind(3),
    div:n-tes-Kind(4) {
      biegen: 1;
      svg {
        Schriftgröße: 1,5rem;
        Rand oben: 0,9rem;
      }
    }
    div:n-tes-Kind(2) {
      Flexibilität: 5;
      Eingabe {
        Breite: 100 %;
        Höhe: 2,5rem;
        Gliederung: keine;
        Polsterung links: 0,5rem;
        Box-Größe: Rahmenbox;
        Höhe: 2,5rem;
        Rand oben: 0,5rem;
        Rahmenstil: keiner;
        Schriftgröße: 0,9rem;
        Rahmenradius: 4px;
        Hintergrundfarbe: #fff;
        Farbe: #000;
      }
    }
  }
}
</Stil>

ChatMsg.vue:

<Vorlage>
  <div id="chatmsg" ref="msg">
    <!-- Dynamische Erstellung -->
    <div v-for="(Element, Index) in Listen" :key="index">
      <div v-if="item.id==122" class="Benutzer">
        <div v-scroll>
          <img :src="item.face" alt />
          <div Klasse="Blase">
            <span>{{item.word}}</span>
          </div>
        </div>
      </div>
      <div v-if="item.id==1529" class="touser">
        <div v-scroll>
          <img :src="item.face" alt />
          <div Klasse="tobubble">
            <span>{{item.word}}</span>
          </div>
        </div>
      </div>
    </div>
  </div>
</Vorlage>

<Skript>
importiere Benutzerinformationen aus "./userinfo";
Standard exportieren {
  Name: "ChatMsg",
  Daten() {
    zurückkehren {
      Benutzerbild: "",
      Listen: []
    };
  },
  montiert() {
    diese.Benutzer-ID = Benutzerinfo.ID;
    dies.userimg = Benutzerinfo.imgurl;
  },
  // vue scrollt automatisch zum Ende der Direktiven: {
    scrollen: {
      eingefügt(el) {
        el.scrollIntoView();
      }
    }
  },
  Methoden: {
    Nachricht speichern(tomsg) {
      diese.lists.push({
        ID: diese.Benutzer-ID,
        Gesicht: this.userimg,
        Wort: tomsg
      });
    },
    ZufallsMsg() {
      lass zuuserdata = userinfo.data;
      diese.lists.push({
        ID: touserdata.id,
        Gesicht: touserdata.imgurl,
        Wort:
          touserdata.words[Math.floor(Math.random() * touserdata.words.length)]
            .Info
      });
    }
  }
};
</Skript>

<style lang="scss" scope>
#chatmsg {
  Position: relativ;
  oben: 3,5rem;
  Breite: 100 %;
  Mindesthöhe: 44rem;
  Hintergrundfarbe: rgb(238, 212, 238);
  Rand unten: 3,5rem;
  Überlauf-x: versteckt;
  Überlauf-y: automatisch;
  .Benutzer {
    Position: relativ;
    Breite: 100 %;
    Überlauf: versteckt;
    Rand: 0,8rem 0;
    img {
      Objekt-Passung: Abdeckung;
      Breite: 3rem;
      Höhe: 3rem;
      Rahmenradius: 3px;
      schweben: rechts;
      Rand rechts: 1rem;
    }
    .blase {
      Position: relativ;
      schweben: rechts;
      Rand rechts: 1rem;
      Polsterung: 0,8rem;
      Box-Größe: Rahmenbox;
      Rahmenradius: 3px;
      maximale Breite: 65 %;
      Hintergrundfarbe: rgb(116, 228, 116);
      Spanne {
        Höhe: 1,25rem;
        Zeilenhöhe: 1,25rem;
      }
    }
    .bubble::nach {
      Position: absolut;
      rechts: -1,3rem;
      oben: 0,8rem;
      Inhalt: "";
      Breite: 0;
      Höhe: 0;
      Rand: 0,7rem durchgezogen;
      Rahmenfarbe: transparent transparent transparent rgb(116, 228, 116);
    }
  }
  .touser {
    Position: relativ;
    Breite: 100 %;
    Überlauf: versteckt;
    Rand: 0,8rem 0;
    img {
      Objekt-Passung: Abdeckung;
      Breite: 3rem;
      Höhe: 3rem;
      Rahmenradius: 3px;
      schweben: links;
      Rand links: 1rem;
    }
    .zublasen {
      Position: relativ;
      schweben: links;
      Rand links: 1rem;
      Polsterung: 0 0,7rem;
      Box-Größe: Rahmenbox;
      Rahmenradius: 3px;
      maximale Breite: 65 %;
      Hintergrundfarbe: rgb(116, 228, 116);
      Zeilenhöhe: 3rem;
    }
    .tobubble::nach {
      Position: absolut;
      links: -1,3rem;
      oben: 0,8rem;
      Inhalt: "";
      Breite: 0;
      Höhe: 0;
      Rand: 0,7rem durchgezogen;
      Rahmenfarbe: transparent rgb(116, 228, 116) transparent transparent;
    }
  }
}
</Stil>

3. Verzeichnisstruktur

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Vue + Express + Socket realisiert Chat-Funktion
  • Vue realisiert Web-Online-Chat-Funktion
  • Das Vue + Webterminal imitiert die Chatroom-Funktion der WeChat-Webversion
  • Vue.js imitiert das WeChat-Chatfenster, um Komponentenfunktionen anzuzeigen
  • Vue + socket.io implementiert einen einfachen Chatroom-Beispielcode
  • Eine Single-Page-Anwendungsfunktion, die mobiles QQ basierend auf Vue2 imitiert (Zugriff auf Chatbot)
  • So verwenden Sie RongCloud IM, um die Chat-Funktion im Vue Cli 3-Projekt zu implementieren
  • Beispiel einer von Vue implementierten WeChat-Roboter-Chat-Funktion [mit Quellcode-Download]
  • Mehrpersonen-Online-Chatroom basierend auf Vue und WebSocket
  • Vue+SSH-Framework zur Realisierung von Online-Chat

<<:  Oracle VM VirtualBox-Installation des CentOS7-Betriebssystems – Tutorial-Diagramm

>>:  Verstümmelte Zeichen und Lösungen im MySQL-Zeichensatz

Artikel empfehlen

Eine Kurzanleitung zu Docker

Docker bietet eine Möglichkeit, Software automati...

Analyse des Idea-Compiler-Vue-Einrückungsfehlerproblemszenarios

Projektszenario: Beim Ausführen des Vue-Projekts ...

Zusammenfassung der Verwendung des CSS-Bereichs (Stilaufteilung)

1. Verwendung des CSS-Bereichs (Stilaufteilung) I...

MySQL-Datenbanktabelle und Datenbankpartitionierungsstrategie

Lassen Sie uns zunächst darüber sprechen, warum w...

Erstellen der Benutzererfahrung

<br />Vielleicht sind Sie gerade in ein Unte...

JS implementiert Layoutkonvertierung in Animation

Beim Schreiben von Animationen mit JS wird häufig...

Lösung für das Problem der Nullspalte in der NOT IN-Füllgrube in MySQL

Als ich vor einiger Zeit an einer kleinen Funktio...

So aktivieren Sie die JMX-Überwachung über Tomcat

Erstellen Sie eine Simulationsumgebung: Betriebss...

Zusammenfassung von 3 Möglichkeiten zum verzögerten Laden eines Vue-Routers

Kein Lazy Loading verwenden importiere Vue von „v...

So aktualisieren Sie MySQL 5.6 auf 5.7 unter Windows

Vorne geschrieben Es gibt zwei Möglichkeiten, MyS...

Implementierung eines einfachen Chatroom-Dialogs basierend auf WebSocket

In diesem Artikel finden Sie den spezifischen Cod...