• Vue的自定义指令


    Vue框架中,它的一大特点就是指令。框架中为我们提供了很多基础指令,但是有些需求官方提供的指令无法办到,即官方允许我们自己定义指令。

    写法:v-指令名     

    规定:指令都以v-开头,后跟我们自己取的指令名,注意我们取得指令名不能是官方已经声明过的

    如何定义指令?

    新学习一个属性directives,在里面定义我们指令的功能,写法:

    1. directives:{
    2. 指令名:{
    3. inserted(el,option){
    4. //处理程序允许我们操作页面
    5. }
    6. }
    7. }

    这里的inserted是钩子函数,其第一个参数el为指令所在的那个元素节点,第二个option是传入的实参对象,就是v-指令名="",引号中的变量的值。

    这样创建的一个指令是局部指令,在当前new Vue()对象所关联的标签内部使用。

    我们也可以定义一个全局的自定义指令,写法:

    1. Vue.directive("指令名", {
    2. // 当绑定元素插入到 DOM 中。
    3. inserted(el) {
    4. // 处理程序
    5. }
    6. })

    指令定义函数提供了几个钩子函数(可选)

    【bind】

      只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。

    【inserted】

      被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)。

    【update】

      所在组件的 VNode 更新时调用,但是可能发生在其孩子的 VNode 更新之前。指令的值可能发生了改变也可能没有。但是可以通过比较更新前后的值来忽略不必要的模板更新。

    【componentUpdated】

      所在组件的 VNode 及其孩子的 VNode 全部更新时调用。

    【unbind】

      只调用一次, 指令与元素解绑时调用。

    注意区别:

    bind与inserted:bind时父节点为null,inserted时父节点存在;

    update与componentUpdated:update是数据更新前,componentUpdated是数据更新后。

    钩子函数参数

    第一个参数:指令所绑定的元素,可以用来直接操作 DOM。

    第二个参数(可选):一个对象,包含指令名称及该指令所绑定的表达式信息。

    第三个参数(可选):Vue 编译生成的虚拟节点。

    第四个参数(可选):上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。

    动手敲一敲,写一个修改字体大小的指令

    1. <div id="box">
    2. <div v-size="fs">{{msg}}div>
    3. div>
    4. <script>
    5. new Vue({
    6. el: "#box",
    7. data: {
    8. msg:"基尼太没",
    9. fs:"30px"
    10. },
    11. directives: {
    12. size:{
    13. inserted(el,option){
    14. console.log(option);
    15. el.style.fontSize=option.value
    16. }
    17. }
    18. }
    19. })
    20. script>

    效果:

     

    补充:nextTick()函数,类似于window.onload()在这个函数内传入的回调函数,是在组件加载完了才会执行。

    学习了生命周期函数以后  会有一个问题:我们在写业务时  总是会考虑一个事情: 现在正在写的业务代码能否操作vm.所以我们需要一个工具  就是让我们写的代码 无论在哪里写  都希望它是组件加载完了以后才运行

    例如:在beforecreat(){},vm对象还没创建完成时都可以在这个函数通过nextTick()操作vm对象

    代码说明:

    1. <div id="box">
    2. {{msg}}
    3. div>
    4. <script>
    5. new Vue({
    6. el:"#box",
    7. data:{
    8. msg:"666"
    9. },
    10. beforeCreate() {
    11. this.$nextTick(()=>{
    12. this.msg=777
    13. })
    14. },
    15. })
    16. script>

     这时页面打印的不是666,而是777 

  • 相关阅读:
    上转换纳米颗粒修饰二硫化钼纳米片|聚多巴胺修饰的二硫化钼纳米片(MoS2-PDA)|PEG聚乙二醇包裹二硫化钼纳米片(MoS2-PEG)
    【编程不良人】SpringSecurity实战学习笔记04---RememberMe
    FusionInsight MRS Flink DataStream API读写Hudi实践
    【刷题笔记9.25】LeetCode:合并二叉树
    【云原生持续交付和自动化测试】5.2 自动化测试和集成测试
    安全狗助力厦门“单一窗口”开展网络安全应急演练
    Na小工具(电脑)
    学习Python中turtle模块的基本用法(2:基本绘图函数测试)
    CSRF攻击(2), 绕过Referer防御
    UVA297 四分树 Quadtrees
  • 原文地址:https://blog.csdn.net/m0_59345890/article/details/126693845