我有一个NavigationStack
,里面有三个窗体,每个窗体都有几个屏幕。如何只跨屏幕共享表单的ViewModel
,而不必全局创建示例(在ContentView
内部)?目前,无论是否使用,都会创建每个ViewModel
。这是我的代码
struct ContentView: View {
@StateObject private var pathStore = PathStore()
@StateObject var formOneVM = FormOneViewModel()
@StateObject var formTwoVM = FormTwoViewModel()
var body: some View {
NavigationStack(path: $pathStore.path) {
HomeView()
.navigationDestination(FormOneRoutes.self){ route in
switch route{
case .screenOne:
FormOneScreenOne()
case .screenTwo:
FormOneScreenTwo()
}
.navigationDestination(FormTwoRoutes.self){ route in
switch route{
case .screenOne:
FormTwoScreenOne()
case .screenTwo:
FormTwoScreenTwo()
}
}
.environmentObject(formOneVM)
.environmentObject(formTwoVM)
}
我试过将每个表单放在自己的NavigationStack
中,但嵌套的NavigationStack
似乎不适合我。如果你有嵌套的NavigationStack
工作或有其他替代方案,请分享。
1条答案
按热度按时间yhuiod9q1#
一个视图模型的例子,只有在进入一个特定的表单层次结构时才创建。首先使用navigationDestination,然后使用navigationLink和binding: