小编Ack*_*ydd的帖子

如何在 Vue 3 中使用 router-view 使某些组件“保持活动”?

我创建了一个由两个主要组件组成的小应用程序,我使用 vue 路由器在组件之间进行路由。

第一个组件称为 MoviesList,第二个组件称为 Movie。我已将它们注册到routes js 文件中。

const routes = [
  {
    path: '/',
    name: 'Home',
    component: MoviesList
  },

  {
    path: '/:movieId',
    name: 'Movie',
    component: Movie
  }
  
]
Run Code Online (Sandbox Code Playgroud)

我的 App.vue 模板如下所示

<template>
   <router-view></router-view>
</template>
Run Code Online (Sandbox Code Playgroud)

如何使 MovieList 组件缓存起来,或者说它是用<keep-alive>标签包裹的?期望的结果是缓存 MovieList 组件,而不缓存 Movie 组件。

我想这样做,因为 MovieList 组件有一个在 Mounted() 钩子上运行的方法,每当我切换路由并返回时,该方法都会再次运行,因为组件被重新渲染。

javascript vue.js vue-router vuejs3 vue-router4

11
推荐指数
2
解决办法
2万
查看次数

在实体框架中查询 DbContext.Set(TypeVariable)

我正在重构一个应用程序以反转一些依赖项。部分原始代码用于DbContext.Set<MyEntityType>()获取要查询的集合。

通过反转,使用 的代码不再明确知道 MyEntityType DbContext.Set<MyEntityType>(),所以现在我DbContext.Set(TypeVariable)改为使用。

重构在返回正确 DbSet 的范围内起作用。

但是,类型DbContext.Set(TypeVariable).LocalIList(包含类型未知) where-as 的类型DbContext.Set<MyEntityType>().LocalObservableCollection<MyEntityType>。这意味着现在不可能对 DbSet 执行 Linq。

我能够实现的最佳解决方法是强制转换为 MyEntityType 和其他实体类型实现的接口(为了清楚起见,省略了一些代码)

var set = Context.Set(targetType);
var entity = set.Local.OfType<IActionTarget>()
    .FirstOrDefault(l => l.Id == key.Id && l.EffectiveDate == key.EffectiveDate);
var querables = set as IQueryable<IActionTarget>;
entity = querables.FirstOrDefault(e => e.Id == key.Id && e.EffectiveDate == key.EffectiveDate);
Run Code Online (Sandbox Code Playgroud)

所以,两个问题:

为什么不DbContext.Set(TypeVariable)返回强类型集?

有没有更好的方法来进行依赖倒置?

应要求提供更多详细信息

这都是关于依赖的。模型包含通过 EF Code First 以典型方式(但通过Repository)持久化的 POCO 类。一个ActionEvaluator …

entity-framework

5
推荐指数
1
解决办法
9230
查看次数