当前位置: 首页 > news >正文

学生个性化成长平台搭建随笔记

1.Vue的自定义指令

在 Vue.js 中,我们可以通过 Vue.directive() 方法来定义自定义指令。具体来说,我们需要传递两个参数:

  1. 指令名称:表示我们要定义的指令名称,可以是一个字符串值,例如:'has-role'。

  2. 钩子函数对象:表示包含了一组钩子函数的对象,用于定义指令的行为。这些钩子函数包括:bind、inserted、update、componentUpdated 和 unbind 等。

下面是一个简单的例子,演示了如何定义一个名为 v-focus 的自定义指令:

Vue.directive('hasDwRole', {inserted: function (el, binding) {changeHasRole(el, binding)}
})

 上面的代码中,我们定义了一个名为 has-dw-role 的自定义指令,并在 inserted 钩子函数中实现了聚焦元素的逻辑。在使用自定义指令时,只需在需要聚焦的元素上添加 v-has-dw-role 指令即可:

  <el-menu:default-active="defActive"mode="horizontal"background-color="#34495e"text-color="#fff"active-text-color="#409eff"class="dw-menu-height dw-menu"router@select="handleSelect"><el-menu-item index="/dw/survey" >我的问卷</el-menu-item><el-menu-item index="/dw/user" >个人中心</el-menu-item><el-menu-item v-has-dw-role="'DWSURVEY_SUPER_ADMIN'" index="/dw/admin/user" >用户管理</el-menu-item></el-menu>

1.1钩子函数对象

在定义自定义指令时,我们需要使用钩子函数对象来指定自定义指令的行为。这些钩子函数包括:

  1. bind:只调用一次,在指令绑定到元素上时立即执行。这里可以进行一些初始设置,例如添加事件监听器等。

  2. inserted:在绑定元素插入到父节点时调用(仅保证父节点存在,但不一定已被插入文档中)。这里可以进行一些操作,例如聚焦元素或者设置样式等。

  3. update:在组件更新时调用,但不包括初始渲染。首次渲染时不会调用此钩子函数。这里可以对元素进行一些更新操作,例如更新绑定的值。

  4. componentUpdated:在组件和子组件全部更新后调用。这里可以进行一些操作,例如更新样式或者调用第三方库等。

  5. unbind:只调用一次,在指令与元素解绑时立即执行。这里可以进行一些清理操作,例如移除事件监听器等。

inserted 和 update 钩子函数分别对应了 v-show 和 v-if 指令的行为钩子函数:bind 和 unbind 钩子函数分别对应了 v-on 指令的行为钩子函数等。

需要根据实际需求和场景选择合适的钩子函数来实现自定义指令的功能。希望这能够帮助你理解自定义指令的钩子函数!

1.2使用方法

需要注意的是,每个钩子函数都会接收三个参数:

  • el:指令所绑定的元素,可以用来直接操作 DOM。
  • binding:一个对象,包含了指令的信息。
  • vnode:Vue 编译生成的虚拟节点。
function changeHasRole (el, binding) {if (!roleCheck(binding.value)) {el.parentNode.removeChild(el)}function roleCheck (value) {const authority = DwAuthorized.getAuthority()for (let i=0; i<authority.length; i++) {if (value === authority[i]) {return true}}return false}
}
Vue.directive('hasDwRole', {inserted: function (el, binding) {changeHasRole(el, binding)}
})

http://www.lryc.cn/news/305170.html

相关文章:

  • XTuner InternLM-Chat 个人小助手认知微调实践
  • 编程笔记 Golang基础 025 列表
  • Rollup + Ts
  • 5个精美的wordpress中文企业主题模板
  • 【数据分享】2011-2023年我国地级市逐月二手房房价数据(Excel/Shp格式)
  • 鸿蒙会成为安卓的终结者吗?
  • Sora横空出世!AI将如何撬动未来?
  • Selenium浏览器自动化测试框架详解
  • XGB-11:随机森林
  • 超平面介绍
  • 【苍穹外卖】一些开发总结
  • Python 3 中,`asynchat`异步通信
  • RAW 编程接口 TCP 简介
  • Oracle EBS FA折旧回滚的分录追溯
  • sql注入 [极客大挑战 2019]FinalSQL1
  • 持续集成,持续交付和持续部署的概念,以及GitLab CI / CD的介绍
  • [Java 项目亮点] 三层限流设计
  • GPT-SoVITS 快速声音克隆使用案例:webui、api接口
  • 高速自动驾驶智慧匝道(HIC)系统功能规范
  • SQL Server——建表时为字段添加注释
  • 【明道云】导入Excel数据时的默认顺序
  • 几种后端开发中常用的语言。
  • Sora——探索AI视频模型的无限可能
  • [NCTF2019]True XML cookbook --不会编程的崽
  • Qt 应用程序中指定使用桌面版本的 OpenGL或嵌入式系统OpenGL ES的 API 进行渲染
  • 大数据软件,待补充
  • 深入探索pdfplumber:从PDF中提取信息到实际项目应用【第94篇—pdfplumbe】
  • 实现linux platform tree框架下ICM20608驱动开发(SPI)
  • 在前端开发中需要考虑的常见web安全问题和攻击原理以及防范措施
  • 年关将至送大礼 社区适时献爱心