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通信的资料请关注脚本之家其它相关文章!