简单学习vue指令directive_javascript技巧

本文为大家分享了vue指令directive的使用方法,供大家参考,具体内容如下

1.指令的注册

指令跟组件一样需要注册才能使用,同样有两种方式,一种是全局注册:

Vue.directive('dirName',function(){

  //定义指令

});

另外一种是局部注册:

new Vue({

  directives:{

    dirName:{

      //定义指令

    }

  }

});

2.指令的定义

指令定义,官方提供了五个钩子函数来供我们使用,分别代表了一个组件的各个生命周期

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

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

update: 被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新(详细的钩子函数参数见下)。

componentUpdated: 被绑定元素所在模板完成一次更新周期时调用。

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

在这里其他几个都好理解,关于模板更新(update)这里,本人的理解是:该指令所在的模板有变化而需要重新渲染的时候,比如当一个输入框的model发生了变化就会触发指令。当然此处说的比较模糊,具体的还有待研究。

这段代码可以实现关于update的使用

<div id="app">
  <input type="text" v-focus="name" v-model="name" :data-name="name">
  <button type="button" @click="name='zw'">click</button>

  <!--当点击按钮的时候name改变,继而触发update中的方法-->
</div>
<script>

  Vue.directive('focus',{
    bind: function(el, binding){
    console.log('bind:',binding.value);
  },
  inserted: function(el, binding){
    console.log('insert:',binding.value);
  },
  update: function(el, binding, vnode, oldVnode){
    el.focus();
    console.log(el.dataset.name);//这里的数据是可以动态绑定的
    console.table({
      name:binding.name,
      value:binding.value,
      oldValue:binding.oldValue,
      expression:binding.expression,
      arg:binding.arg,
      modifiers:binding.modifiers,
      vnode:vnode,
      oldVnode:oldVnode
    });
  },
  componentUpdated: function(el, binding){
    console.log('componentUpdated:',binding.name);
  }
});
new Vue({
  el:'#app',
  data:{
    name:'zwzhai'
  }
});
</script>

3.钩子函数的定义

以下是官方提供的几个参数:

el: 指令所绑定的元素,可以用来直接操作 DOM 。
binding: 一个对象,包含以下属性:
name: 指令名,不包括 v- 前缀。
value: 指令的绑定值, 例如: v-my-directive="1 + 1", value 的值是 2。
oldValue: 指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
expression: 绑定值的字符串形式。 例如 v-my-directive="1 + 1" , expression 的值是 "1 + 1"。
arg: 传给指令的参数。例如 v-my-directive:foo, arg 的值是 "foo"。
modifiers: 一个包含修饰符的对象。 例如: v-my-directive.foo.bar, 修饰符对象 modifiers 的值是{ foo: true, bar: true }。
vnode: Vue 编译生成的虚拟节点,查阅 VNode API 了解更多详情。
oldVnode: 上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。

这几个参数,大家看文档也能理解,就不多说了,关于bingding的几个属性说一下自己的看法,value这个属性,可以传字面量,也可以传单条语句(如上),还可以以变量的形式如<input type="text" v-focus="name" v-model="name">;arg这里可以传一个字符串,因为在value去访问绑定值得时候拿到的不是直接写的那个,也就是说v-focus="name",这个name永远都是一个变量,需要定义赋值,而arg可以直接访问该值,如v-focus:foo,那么在钩子函数中拿到的就是foo这个字符串。

在vue的指令中是不可以双向数据绑定的,如官方所说:除了 el 之外,其它参数都应该是只读的,尽量不要修改他们。如果需要在钩子之间共享数据,建议通过元素的 dataset 来进行。这里补充下关于dataset的知识:

data-  是html5的一个新属性,查了下浏览器支持程度,目前的主流浏览器都是支持的,IE的话要到10以上。具体的使用:在HTML中以属性的方式去写,data-yourname="value",在js中取这个属性就不用使用getAttribute这个方法,而是直接访问,ele.dataset.yourname,在js中你也可以添加和删除,添加:ele.dataset.dessert="yourname",删除:dette ele.dataset.name。此外,这个属性可以用作css选择器:.class[data-name]:{}。

最后附上自己写的一个vue小程序,简单的页面切换,使用vue-cli构建,sample的简单版,还使用的mint-ui组件库,git地址:https://github.com/Stevenzwzhai/news-vue

本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索指令
, vue
directive
,以便于您获取更多的相关知识。

时间: 2024-10-14 14:56:43

简单学习vue指令directive_javascript技巧的相关文章

Vue.JS入门教程之自定义指令_javascript技巧

基础 Vue.js 允许你注册自定义指令,实质上是让你教 Vue 一些新技巧:怎样将数据的变化映射到 DOM 的行为.你可以使用Vue.directive(id, definition)的方法传入指令id和定义对象来注册一个全局自定义指令.定义对象需要提供一些钩子函数(全部可选): bind: 仅调用一次,当指令第一次绑定元素的时候. update: 第一次是紧跟在 bind 之后调用,获得的参数是绑定的初始值:以后每当绑定的值发生变化就会被调用,获得新值与旧值两个参数. unbind:仅调用一

使用Promise解决多层异步调用的简单学习心得_javascript技巧

前言 第一次接触到Promise这个东西,是2012年微软发布Windows8操作系统后抱着作死好奇的心态研究用html5写Metro应用的时候.当时配合html5提供的WinJS库里面的异步接口全都是Promise形式,这对那时候刚刚毕业一点javascript基础都没有的我而言简直就是天书.我当时想的是,微软又在脑洞大开的瞎捣鼓了. 结果没想到,到了2015年,Promise居然写进ES6标准里面了.而且一项调查显示,js程序员们用这玩意用的还挺high. 讽刺的是,作为早在2012年就在M

javascript-建立一个简单的网站有什么技巧和方法

问题描述 建立一个简单的网站有什么技巧和方法 我是一个初学者,有一些HTML.CSS. jQuery.JavaScript的基础,但是想完整的建立一个简单的网站,感觉有些吃力,求大神们给小弟一些指导, 指明方向,目前相当迷茫........ 解决方案 学习一种服务器编程语言,比如C#/ASP.NET Java/SSH RubyOnRails Node.js Python PHP等等. 或者专注前端,使用现成的开源的应用.比如做论坛的discuz,做新闻网站的dedecms.wordpress 解

开发者和系统管理者最喜爱的开源工具Vim 起步学习的五个技巧

开发者和系统管理者最喜爱的开源工具Vim 起步学习的五个技巧 开发者和系统管理者最喜爱的开源工具Vim 起步学习的五个技巧:Vimtutor,GVim,键盘表,Vimium,其它人. 作者:Jason Baker来源:Linux中国|2016-08-04 10:29  移动端  收藏   分享   多年来,我一直想学 Vim.如今 Vim 是我最喜欢的 Linux 文本编辑器,也是开发者和系统管理者最喜爱的开源工具.我说的学习,指的是真正意义上的学习.想要精通确实很难,所以我只想要达到熟练的水平

十个简单好用的设计技巧

[编者按]本文作者Mark Praschan是一位具有将近十年经验的http://www.aliyun.com/zixun/aggregation/7007.html">网页设计师,Web开发师,Web项目经理人. 文中强调复杂的高级效果能为设计增色不少,但如果用得不对,只会影响用户对重点内容的关注.高级效果可能正好是一项好的设计的冲击力所在,但即便如此,也还是需要一些更简单的效果与其配合. 简单的效果和技巧是建造当今设计的基石.比方说,如果你都不知道如何正确选择颜色和文字效果,灿烂的 星

设计师参考:十个简单好用的设计技巧

复杂的设计技巧总是很花时间,也实在是....复杂 (-_-). 高级效果 为设计增色不少,但如果用得不对,只会影响用户对重点内容的关注.高级效果可能正好是一项好的设计的冲击力所在,但即便如此,也还是需要一些更简单的效果与其配合. 简单的效果和技巧是建造当今设计的基石.比方说,如果你都不知道如何正确选择颜色和文字效果,灿烂的 星光效果又能有什么用? 本着"少就是多"的理念,网页教学网为你精选了十个简单好用的设计技巧 ,它们能大大提升你设计的专业性和感染力. 基础先行. 学会走之前要先学会

初学者怎么抠出发丝?PS简单抠出发丝的技巧

   初学者怎么抠出发丝?PS简单抠出发丝的技巧           今天小编就给大家介绍一片PS利用正片叠底来进行快速扣发丝,初学者也是一学就会哦!希望这个教程对大家有所帮助.感兴趣的朋友来和我一起看看吧! 效果图 原图 第一步:首先将准备好的美女照片在PS里打开照片,执行CTRL+J两次,复制图层得到图层1和图层1副本,分别锁定图层,如下图所示 第二步:选中图层1,把图层模式改为正片叠底,如下图所示 第三步:然后选中图层1副本,添加一个蒙版,用画笔工具将人物轮廓擦出来,如下图所示

简单粗暴几步磨皮技巧

  简单粗暴几步磨皮技巧,保留人像脸部的皮肤细节,看起来很清晰,好像素颜一,质感自然,值得动手练习   分类: PS图片处理 ps磨皮教程

PS简单粗暴几步磨皮技巧

  简单粗暴几步磨皮技巧,保留人像脸部的皮肤细节,看起来很清晰,好像素颜一,质感自然,值得动手练习 分类: PS入门教程 ps磨皮教程