• 定义自定义指令;inserted()、update()


    自定义指令的意义:对普通DOM元素进行底层操作;

    作用 :可以获取到底层的dom,拿到想要的节点,从而进行操作;

    实际应用:可以通过指令知道什么时候dom创建完成,从而进行依赖dom的库的初始化工作;

    1. <div id="box">
    2. <div v-hello>11111div>
    3. div>
    4. <script>
    5. Vue.directive("hello",{
    6. //指令的生命周期函数
    7. inserted(el){
    8. console.log("inserted",el)
    9. }
    10. })
    11. new Vue({
    12. el: "#box",
    13. data: {
    14. }
    15. })
    16. script>

    结果:

    代码中:div标签里的 hello 是自定义的指令,在dom中用的时候就是:v-指令;

    定义hello指令,通过Vue.directive(“指令名”,{}),和定义组件形式一样;


    inserted()生命周期函数:

    inserted()生命周期函数:

    触发时间:节点第一次插入到父节点(页面)中会触发,只会触发这一次;

    用法:inserted(接收dom节点的形参,接收指令参数的形参)


    如何拿到底层dom节点呢: 

    • 通过指令的生命周期函数:inserted(),这个函数的作用是只要当前节点插到页面上,这个函数就会自动执行,就会获取到该节点;
    • 注意:inserted是指令的生命周期函数跟组件的生命周期函数没关系,不一样,是相互独立的;

    inserted函数的参数el:

    • 这个参数就是当前节点,当前节点看你把指令用在谁身上喽。代码中hello指令在子div身上,所以拿到的就是"
      11111
      "这个节点;

    指令里面也可以传参数:

    • 传参数的写法:要加上引号:
    " 'yellow' ">11111</div>//yellow是参数
    • 不加引号的,直接写在里面的,传的是状态,不是参数:
    "yellow">11111</div>//yellow是状态

    inserted接收参数: binding

    1. "box">
    2. <div v-hello=" 'yellow' ">11111div>
    1. Vue.directive("hello",{
    2. //指令的生命周期函数
    3. inserted(el,binding){
    4. console.log("inserted",binding)
    5. el.style.background = binding.value
    6. }
    7. })
    • inserted第二个参数binding是接收“yellow”参数的,结果是对象:
    • 结果:

    • 对象里面的value值放的就是yellow属性,再把这个属性赋值给标签做样式,就很有用:
    el.style.background = binding.value


    update():更新时期的生命周期函数

    • 如果想更改这个参数,也就是 指令接收的参数:v-hello=" 'yellow' ,会发现不好用,改不了,因为inserted生命周期函数只在节点插入父节点的时候,会自动执行一次,后面就不会再执行了;
    • 如果想更改参数,可以用指令的生命周期函数update():

    update():更新时期的生命周期函数

    触发事件:当指令的参数或者状态有所更新就会触发

    用法:update(接收dom节点的形参,接收指令参数的形参)

    1. update(el,binding){
    2. console.log("update",binding)
    3. el.style.background = binding.value
    4. }

    完整代码:

    1. <div id="box">
    2. <div v-hello=" whichcolor ">11111div>
    3. div>
    4. <script>
    5. Vue.directive("hello",{
    6. //指令的生命周期函数
    7. inserted(el,binding){
    8. console.log("inserted",binding)
    9. el.style.background = binding.value
    10. },
    11. update(el,binding){
    12. console.log("update",binding)
    13. el.style.background = binding.value
    14. }
    15. })
    16. new Vue({
    17. el: "#box",
    18. data: {
    19. whichcolor:'blue'
    20. }
    21. })
    22. script>

    结果:

     

    以上两个生命周期函数有简写方式:

    1. Vue.directive("hello",()=>{
    2. //每次插入或者更新dom就会操作一次
    3. el.style.background = binding.value
    4. }),

    就是把两个生命周期函数放在一起写;

    当然这种简写方式只有不强调单独一个生命周期函数时,可以使用;让只想用单独的inserted函数这样的写法就不好了。 

     

  • 相关阅读:
    快消品b2b电子商务网站建设方案
    『现学现忘』Docker基础 — 36、CMD指令和ENTRYPOINT指令的区别
    阅读笔记——MetaAge: Meta-Learning Personalized Age Estimators
    Hadoop内hive之间,hive与DB、ES等之间数据交互的问题与解决方案
    Vue3文件拖拽上传
    【Linux】GDB调试
    python数据处理作业11:建一个5*3的随机数组和一个3*2的数组,其元素为1,2,3,4,5,6,求两矩阵的积
    MyBatis细节
    Unity简单操作:Unity接sdk写的java代码放在Plugins/Android/libs目录中即可被打进apk中,无需提前编译成jar
    【我的OpenGL学习进阶之旅】当你运行OpenGL程序的时候,程序并不绘制任何内容,并且白屏和黑屏的时候怎么排查?
  • 原文地址:https://blog.csdn.net/a1598452168YY/article/details/128076248