Skip to content

从 vue-epg 迁移 ​

vuEPG 的移动逻辑与 vue-epg 完全不同:vue-epg 在全部元素中比较距离,vuEPG 按 EPGGroup 的层级逐层查找(见 移动规则)。迁移旧页面时,请对照以下差异。

迁移前先看差异 ​

下表对照 npm 的 vue-epg 2.3.1 用法,便于判断迁移收益与需要保留的业务逻辑。

方面vue-epgvuEPG取舍
框架与接入Vue 2 插件,v-items / v-group,通过 $service 调用Vue 2.7 / Vue 3,同一套指令与 APIVue 2.6 需先升级;现有页面可以逐项迁移
导航规则在已注册项中按位置查找,分组可拦截离开方向按真实 DOM 分组逐层查找,支持默认入口新规则更强调区域边界,跨组落点需重新验收
返回处理mixin 读取 serviceBackonBack() 随组件和 KeepAlive 生命周期生效弹窗关闭后可恢复页面处理,需改登记方式
XPath 与位置记录提供 getEleByPath()、getPointerPosition()提供节点查询和焦点 API;没有内置 XPath原项目直接使用 XPath 的代码需保留自有工具或改用业务 ID
依赖与按键依赖 n-zepto、xpath-dom,默认拦截所有按键零运行时依赖,可配置按键;可编辑元素保留文字输入减少依赖,但自定义按键与输入逻辑要按新规则核对

指令 ​

vue-epg 的 v-items / v-group 不再支持,请改为 v-epg-item / v-epg-group。

$service ​

vue-epg 会把实例挂在 $service 上。vuEPG 内置的全局属性是 $epg:

vue
<!-- vue-epg -->
<div v-items @up="$service.move(...)">...</div>

<!-- vuEPG -->
<div v-epg-item @epg-up="$epg.move(...)">...</div>

旧代码暂时无法全部修改时,可以手动加一个别名:

ts
import { useVuEPG } from "vuepg";

// Vue 3
app.config.globalProperties.$service = useVuEPG();
// Vue 2
Vue.prototype.$service = useVuEPG();

serviceBack ​

vue-epg 通过 mixin 读取组件的 serviceBack 方法。vuEPG 使用 onBack。旧代码暂时无法全部修改时,可以加一个全局 mixin 兼容(仅支持 Options API,不推荐长期使用):

ts
import { useVuEPG } from "vuepg";

Vue.mixin({
  created() {
    if (typeof this.serviceBack === "function") {
      useVuEPG().onBack(() => this.serviceBack());
    }
  },
});

按键 ​

vue-epg 对所有按键调用 preventDefault(),导致数字输入等浏览器默认行为全部失效。vuEPG 只对预定义的按键事件调用,并且可以逐个配置,见 按键映射。

已移除 ​

vue-epg说明
XPath:getPointerPosition()、getEleByPath(xpath)移除,如有需要请在项目中自行实现
自动为 group 添加 class移除,请直接在模板中为分组元素写 class

基于 MIT 许可发布 · 支持项目