Grafische Erklärung des Funktionsaufrufs der Protodatei in Vue

Grafische Erklärung des Funktionsaufrufs der Protodatei in Vue

1. Proto kompilieren

Erstellen Sie einen neuen Proto-Ordner unter dem Src-Ordner, um alle .proto-Dateien zu speichern. Öffnen Sie das Terminal im Proto-Ordner und geben Sie den folgenden Befehl ein:

//Gehen Sie in den Proto-Ordner und führen Sie die folgende Kompilierung aus. Ersetzen Sie dabei helloworld.proto durch den aktuellen .proto-Dateinamen protoc -I=. helloworld.proto \
    --js_out=import_style=commonjs,binär:.\
    --grpc-web_out=import_style=commonjs,mode=grpcwebtext:.

Eine .proto-Datei (helloworld.proto) wird kompiliert, um zwei JS-Dateien zu generieren:

  • hallowelt_pb.js
  • hallowelt_grpc_web_pb.js

2. Variablen und Funktionen in der kompilierten Protodatei

Die Struktur einer Funktion in .proto besteht hauptsächlich aus zwei Teilen: Funktion und Parameter:

Service-Begrüßer
{
  rpc AddEmployee(Employee) gibt (EmployeeID) zurück {} // Unäre Nachricht mit Mitarbeiterinformationen übermitteln}
//Senden Sie die Anforderung Datentypstruktur Nachricht Mitarbeiter
{
  Zeichenfolgenname = 1;
  int32 Alter = 2;
}
//Gibt die Typstruktur der Funktion zurück, die die Ergebnisnachricht EmployeeID verarbeitet
{
  int32-ID = 1;
}

Funktionsteil

Nach der Kompilierung werden der Dienst mit dem Namen „service Greeter“ und die Funktion AddEmployee in der Datei helloworld_grpc_web_pb.js definiert:

Abschnitt „Parameter“

Die Parameter Employee und EmployeeID sind in helloworld_pb.js definiert:

1. Senden Sie den Anfrageparameter Employee

Der erste Parametername von Employee hat die folgende Funktionsform (dies ist der Anforderungsparameter im festgelegten Format):

Der zweite Parameter „age“ von Employee hat die folgende Funktionsform (dies ist ein Anforderungsparameter im Set-Format):

2. Ergebnisparameter EmployeeID zurückgeben

Das EmployeeID-Rückgabeergebnis hat nur einen Parameter, id. Die Funktionsstruktur ist wie folgt (hier ist der Rückgabeparameter im Get-Format):

Aufrufen von Funktionen in Proto

Ein einfaches Aufrufbeispiel sieht wie folgt aus (klicken Sie auf die Schaltfläche, um ein Klickereignis get_helloworld zu generieren):

<el-button Typ="primär" @click="get_helloworld">
    hallo Welt
</el-button>
get_hallowelt() {
    this.client = neuer GreeterClient("http://192.168.10.102:8181", null, null);

    //Anfrageparameter erstellen und Werte zuweisen var request = new Employee();
    request.setName("Welt");
    Anfrage.SetAge(11);
    // Rufen Sie die entsprechende Grpc-Methode des Clients auf, senden Sie eine Grpc-Anfrage und empfangen Sie den vom Backend zurückgesendeten Rückgabewert this.client.addEmployee(request, {"my-service-header": "test_service"}, (err, response) => {
        wenn (Fehler) {
            konsole.log(
                `Unerwarteter Fehler für addEmployee: Code = ${err.code}` +
                `, Nachricht = "${err.message}"`
            );
        } anders {  
            console.log(response.getId()); // Die zurückgegebenen Informationen drucken}
    });
},

An diesem Punkt können Sie den zurückgegebenen ID-Wert in der Konsole sehen.

Zeigen Sie die zurückgegebenen Ergebnisse in der Benutzeroberfläche an

Die Rückgabewerte der Funktion sollen in geeigneter Form in den Interface-Controls dargestellt werden, hier:

1. Tabellenkontrolle

Das Tabellensteuerelement ist ein häufig verwendetes Steuerelement zur Datenanzeige. Hier ist der Beispiel-Protocode (gibt das Listendatenformat zurück und enthält Aufzählungsvariablen):

rpc SelectAllCameras(SelectAllCamerasRequest) gibt zurück(SelectAllCamerasResponse){}
// Alle Kamerageräte abfragen Nachricht SelectAllCamerasRequest{
  int32 Seitenindex = 1;
  int32 Seitengröße = 2;
  Zeichenfolgenbedingung = 3;
}
//Gibt das Abfrageergebnis zurück, gibt ein Array von CameraInfo zurück, das den Aufzählungstyp CameraBrand enthält
Nachricht SelectAllCamerasResponse{
  CodeErr enumErrorNo = 1;
  wiederholte CameraInfo CameraArray = 2;
}
// Kamerainformationsmeldung CameraInfo{
  Zeichenfolge szCameraUID = 1; // uid
  Zeichenfolge szName = 2; // Name Dongmenkou-Kamera CameraBrand enumCameraBrand = 3; // Marke}
// Kameramarke enum CameraBrand {
  STANDARDKAMERAMARKE = 0;
  HIKI_VISION = 1;
  DAHUA = 2;
  UNIVIEW = 3;
}

1. Header-Datei importieren

importiere { device_register_serviceClient } aus "../proto/device_manage_grpc_web_pb";
importiere { SelectAllCamerasRequest,} von "../proto/device_manage_pb";
 <el-table :data="caminfoTabelle" ref="caminfoTabelle" >
   <el-table-column type="index" :index="table_index" align="center" label="Seriennummer" width="50"></el-table-column>
   <el-table-column prop="UID" label="UID" width="220" align="center">
     <template slot-scope="Umfang">
       <span>{{scope.row.getSzcamerauid()}}</span>
     </Vorlage>
   </el-Tabellenspalte>
   <el-table-column prop="szName" label="Kameraname" width="150" align="center">
     <template slot-scope="Umfang">
       <span>{{scope.row.getSzname()}}</span>
     </Vorlage>
   </el-Tabellenspalte>
   <el-table-column prop="enumCameraBrand" label="Kameramarke" width="120" align="center">
     <template slot-scope="Umfang">
       <span>{{Kameramarke[scope.row.getEnumcamerabrand()].label}}</span>
     </Vorlage>
   </el-Tabellenspalte>
</el-Tabelle>
//Das zurückgegebene Ergebnis einer Array-Variable caminfoTable:[] zuweisen,
// Kameramarke, die CameraBrand wird hier verwendet, um die Dropdown-Feldoptionen beim Hinzufügen von Kamerainformationen auszufüllen, und wird hier auch verwendet, um spezifische Daten anzuzeigen CameraBrand: [
  {Wert:0, Bezeichnung:"Standard"},
  { Wert: 1, Bezeichnung: "sea*" },
  { Wert: 2, Bezeichnung: "Big*" },
  { Wert: 3, Bezeichnung: "Zeichen*" },
],
//Informationen zum Kameragerät abrufen get_camerainfo_data(){
   this.client = neuer device_register_serviceClient("http://192.168.10.102:8181", null, null);
   var request_selectallCam = neue SelectAllCamerasRequest();
   request_selectallCam.setPageIndex(diese.Pagination_queryInfo.page_index);
   request_selectallCam.setPageSize(diese.Pagination_queryInfo.per_page);
   this.client.selectAllCameras(Anfrage_selectallCam,{"mein-service-header": "dev_manage_service"},(Fehler,Antwort)=>{
     wenn(fehler){
        konsole.log(
           `Unerwarteter Fehler für selectAllCameras: Code = ${err.code}` +
             `, Nachricht = "${err.message}"`
         );
     }anders{
         var caminfoList = response.getCameraarrayList();
         this.Pagination_total_pages = caminfoList.length; //Gesamtzahl der Seiten abrufen this.caminfoTable = caminfoList; //Das zurückgegebene Ergebnis der Tabellendatentabellenvariable zuweisen}
   });
   //Passen Sie die Seitenzahl an, um die erste Seite anzuzeigen. this.Pagination_queryInfo.page_index=1;
 },

Zusammenfassen

Dies ist das Ende dieses Artikels über Protodatei-Funktionsaufrufe in Vue. Weitere relevante Vue-Protodatei-Funktionsaufrufe finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die folgenden verwandten Artikel weiter. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Vue-Elternkomponente ruft Funktionsimplementierung der Unterkomponente auf
  • Detaillierte Erklärung der grundlegenden Verwendung der Hilfsfunktion MapGetters in Vuex
  • Detaillierte Erklärung der Requisiten und Kontextparameter der SetUp-Funktion in Vue3
  • So verwenden Sie die Zusatzfunktionen von Vuex
  • Detaillierte Untersuchung von vue2.x - Erklärung der h-Funktion

<<:  Diagramm des Tutorials zum Herunterladen und Installieren von MySQL8.0 für Win10 64-Bit

>>:  Kali Linux Installation VMware Tools Installationsprozess und VM Installation vmtools button grau

Artikel empfehlen

Tutorial zur Installation von mysql5.7.17 über yum auf redhat7

Die Linux-Betriebssysteme der RHEL/CentOS-Reihe v...

Implementierung von 2D- und 3D-Transformationen in CSS3

CSS3 implementiert 2D-Ebenentransformation und vi...

Mehrere Methoden zur Implementierung von Karussellbildern in JS

Karussell Die Grundidee ist: Im großen Container ...

So stellen Sie Docker-Containerdaten wieder her

Die Datenbankdaten der Projekttestumgebung sind v...

Vue3 kapselt die Lupeneffektkomponente der Jingdong-Produktdetailseite

In diesem Artikel wird der spezifische Code der V...

Player in Webseite einbetten Einbettungselement Autostart falsch ungültig

Kürzlich musste ich einen Player in eine Webseite ...

Grundlegende Schritte zur Sicherheitseinstellung für den CentOS7-Server

Schalten Sie den Ping-Scan aus, obwohl dies nicht...

Bringen Sie Ihnen bei, wie Sie eine Reaktion aus HTML implementieren

Was ist React React ist eine einfache JavaScript-...

Beispielcode für HTML-Layout links und rechts

CSS: Code kopieren Der Code lautet wie folgt: html...

Einfaches Beispiel für die Verschönerung von HTML-Kontrollkästchen und -Radios

Einfaches Beispiel für die Verschönerung von HTML...

Analyse des Prinzips des dynamischen Proxys des Mybatis-Mappers

Vorwort Bevor wir mit der Erklärung des Prinzips ...

Das Vue-Projekt implementiert eine Fortschrittsbalkenfunktion für den Dateidownload

Im täglichen Geschäftsleben gibt es zwei gängige ...

Detaillierte Erklärung des Docker-Befehls zum Sichern des Linux-Systems

Tar-Backup-System sudo tar cvpzf backup.tgz --exc...

Einführungstutorial zu React Hooks

Zustandshaken Beispiele: importiere { useState } ...