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

Gemessenes Bild - HTTP-Anforderung

Bitte öffnen Sie die Testseite in einem gängigen ...

CentOS 7.9 Installations- und Konfigurationsprozess von zabbix5.0.14

Inhaltsverzeichnis 1. Grundlegende Umgebungskonfi...

Zusammenfassung der MySQL InnoDB-Architektur

Inhaltsverzeichnis Einführung 1. Gesamtarchitektu...

Gründe für den plötzlichen Leistungsabfall bei MySQL

Manchmal kann es vorkommen, dass eine SQL-Anweisu...

Exquisiter Snake-Implementierungsprozess in JavaScript

Inhaltsverzeichnis 1. HTML-Struktur erstellen 2. ...

So lösen Sie das jQuery-Konfliktproblem

In der Frontend-Entwicklung ist $ eine Funktion i...

Prinzip der MySQL-Paging-Analyse und Effizienzverbesserung

Prinzip der MySQL-Paging-Analyse und Effizienzver...

So verbinden Sie XShell und Netzwerkkonfiguration in CentOS7

1. Linux-Netzwerkkonfiguration Bevor Sie das Netz...