vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > tauri vue通信

tauri和vue通信的问题解决方案示例详解

作者:o_ra

这篇文章主要为大家介绍了tauri和vue通信的问题解决方案示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

vue在前端调用rust里的函数

之前用bery写了个ui发现cpu占用挺高的 就试着用tauri写一下发现性能还挺好的,记录日志时候刷新几万条也不卡

前端使用的是vue在前端调用rust里的函数可以在methods里面添加

async increment() {
      let a = await invoke("set_filter",  {"filter":"filter_str"} );
    },

在rust里面添加

#[tauri::command]
fn set_filter(_window: tauri::Window, filter: &str) -> bool{
    return true;
}

在rust中通知vue需要发消息

在vue中先监听消息可以在mounted中调用

async mounted(){
      this.unlisten = listen('udp_log', this.handleEventRecv);
  },

注销时候调用一下listen返回的值就行了

unmounted(){
    this.unlisten.then(F=>F());
  }

在rust中发消息时候有可能是在单独一个线程里发的可以使用

后台进程使用

lazy_static!{
    static ref G_UDP_SER: Mutex<UdpNetworkPlugin> = Mutex::new(UdpNetworkPlugin::new());
}

创建一个全局变量,先不启动后台进程 ,启动后台进程等app启动获取到可以发消息的句柄再启动,启动app可以使用

fn main() {
    let app = tauri::Builder::default()
        .invoke_handler(tauri::generate_handler![greet, set_filter, get_new_log])
        .build(tauri::generate_context!())
        .expect("init app err");
        //.run(tauri::generate_context!())
        //.expect("error while running tauri application");
    //start_timer(win_app);
    {
        let win_app = app.get_window("main").unwrap();
        let mut udp_ser = G_UDP_SER.lock().unwrap();
        udp_ser.start_thread(win_app);
    }

    app.run(|_,_| {});
}

先构造一个app 先不run 就能用app获取到发消息的句柄

发消息使用

win.emit("udp_log", text.to_string());

这个只有这个win move到后台线程

以上就是tauri和vue通信的问题解决方案示例详解的详细内容,更多关于tauri vue通信的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文