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

Detaillierte Erklärung des Vue Notepad-Beispiels

In diesem Artikelbeispiel wird der spezifische Co...

Designtheorie: Menschenorientiertes Designkonzept

<br />Als sich das Denken in Ost und West sp...

So ändern Sie Farben und Designs in Vim unter Linux

Vim ist ein Texteditor, den wir unter Linux sehr ...

Canvas zeichnet Rubbellos-Effekt

In diesem Artikel wird der spezifische Code zum Z...

Überlegungen zur Partitionierung von MySQL-Datenbanktabellen [empfohlen]

Die Tabellenpartitionierung unterscheidet sich vo...

CSS-Benennung: BEM, Scoped CSS, CSS-Module und CSS-in-JS erklärt

Der Anwendungsbereich von CSS ist global. Wenn da...

Eine kurze Einführung in die Abfrageeffizienz von MySQL-Speicherfeldtypen

Die Suchleistung von der schnellsten bis zur lang...

Ubuntu16.04 erstellt eine php5.6-Webserverumgebung

Ubuntu 16.04 installiert standardmäßig die PHP7.0...

So verweisen Sie direkt auf Vue und Element-UI in HTML

Der Code sieht folgendermaßen aus: <!DOCTYPE h...

Linux-Plattform MySQL ermöglicht Remote-Login

Während des Entwicklungsprozesses stoße ich häufi...

Zusammenfassung des Linux-Befehls nc

Der vollständige Name von NC lautet Netcat (Netwo...