1.ref标识

通过给HTML标签或者组件标签设定ref属性,根据他的属性值来访问这个HTML元素或者组件

语法:this.$refs.属性值

//为p标签设置ref属性
<div id="app">
<p ref="p1">期待你脚踏祥云</p>
<button @click="test">点我</button>
</div>
//根据ref属性值来访问这个元素
methods: {
test() {
console.log(this.$refs.p1.innerText)
}
}

2.v-cloak

在vue实例渲染HTML模版之前,页面中的{{msg}}这种语法就会原模原样的输出,例如

<body>
<div id="app">
<p>{{msg}}</p>
</div>
</body> </html>
<script>
//模拟网速慢的情形,延时创建vue实例
setTimeout(() => {
var vm = new Vue({
el: '#app',
data: {
msg:"今天周末"
},
})
}, 1000);
</script>

解决办法一:为标签设置v-cloak属性

原理:当vue对模版渲染完毕后会移除元素标签内vue指令,可以利用这个特性,结合css的属性选择器来隐藏未解析的标签

//css属性选择器
<style>
[v-cloak]{
display: none;
}
</style>
//为元素添加v-cloak属性,当元素未渲染时处于隐藏状态,渲染完毕后就正常展示
<body>
<div id="app">
<!-- 模版编译完成之后会自动的那个移除 v-cloak 属性-->
<p v-cloak>{{msg}}</p>
</div>
</body> </html>
<script>
//模拟网速慢的情形,延时创建vue实例
setTimeout(() => {
var vm = new Vue({
el: '#app',
data: {
msg:"今天周末"
},
})
}, 1000);
</script>

解决办法二:使用v-text指令

在vue对模版渲染之前,v-text指令不会影响页面的展示


<body>
<div id="app">
<p v-text="msg"></p>
</div>
</body>

3.自定义指令

(1)全局注册

语法:Vue.directive(指令名称,回调函数)

回调函数有2个参数 el和binding

el:指令所绑定的元素,可以用来直接操作 DOM

binding:包含指令相关信息的对象,binding.value就是指令绑定的值

Vue.directive('upper-text',function(el,binding){
el.innerText = binding.value.toUpperCase();
})

(2)局部注册:只能在该组件中使用

组件中接受一个 directives 的选项

directives: {
focus: {
// 指令的定义
inserted: function (el) {
el.focus()
}
}
}

然后你可以在模板中任何元素上使用新的 v-focus 属性,如下:

<!-- 自动获取焦点 -->
<input type="text" v-focus>

(3)如果注册的自定义指令名含有 - 等字符,可以用 '' 包裹起来

directives:{
'lower-text':function(el,binding){
el.innerText = binding.value.toLowerCase();
}
}

(4)自定义指令的使用

<!-- msg的值为 good -->
<p v-html="msg"></p>
<!-- 使用插件的自定义指令 -->
<p v-upper-text="msg"></p>

渲染结果:

<p>good</p>
<p>GOOD</p>

(5)钩子函数

bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。

inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。

update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。

Vue.directive('focus', {
// 当被绑定的元素插入到 DOM 中时……
inserted: function (el) {
// 聚焦元素
el.focus()
}
})

(6)实例:文本滚动指令

思路:将当前文本放入子容器中,动态计算子容器与父容器的宽度差异,调用js定时器动态修改子容器的位置

<script>
Vue.directive('scroll',{
// 当被绑定的元素插入到 DOM 中时……
inserted: function (el,binding) {
//创建容器装载文本
var content_box = document.createElement('div')
content_box.style.display = 'inline-block'
//不允许换行
content_box.style.whiteSpace = 'nowrap'
content_box.innerHTML = binding.value
//将文本容器添加到元素中
el.appendChild(content_box)
//判定内容是否溢出
if(el.scrollWidth - el.offsetWidth > 0){
//隐藏溢出的内容
el.style.overflow = 'hidden' var now_position = 0 //当前位置 默认0
var direction = 'left' //移动方向 默认向左移动
var target = el.offsetWidth - el.scrollWidth //负数
var rest = 20 //动画暂停时间
//使用定时器实时修改位移
setInterval(()=>{
//只有rest小于0才执行动画
if(rest <= 0){
if(direction == 'left'){
now_position--
}else{
now_position++
}
//如果左移到底 则返回
if(now_position < target){
direction = 'right'
}
//如果右移到底 则返回 并暂停动画
if(now_position > 0){
direction = 'left'
//暂停动画
rest = 20
}
//更新位置
content_box.style.transform = `translateX(${now_position}px)`
}
rest--
},100)
}
}
})
new Vue({
el:"#app",
data:{
msg:"床前明月光,疑是地上霜"
}
})
</script>

使用

<body>
<div id="app">
<div style="border:1px solid red;width:100px;margin:20px auto;" v-scroll="msg">
</div>
</div>
</body>

Vue.js 其他指令的更多相关文章

  1. vue.js自定义指令入门

    Vue.js 允许你注册自定义指令,实质上是让你教 Vue 一些新技巧:怎样将数据的变化映射到 DOM 的行为.你可以使用Vue.directive(id, definition)的方法传入指令id和 ...

  2. Vue.js自定义指令的用法与实例

    市面上大多数关于Vue.js自定义指令的文章都在讲语法,很少讲实际的应用场景和用例,以致于即便明白了怎么写,也不知道怎么用.本文不讲语法,就讲自定义指令的用法. 自定义指令是用来操作DOM的.尽管Vu ...

  3. 02: vue.js常用指令

    目录:Vue其他篇 01: vue.js安装 02: vue.js常用指令 目录: 1.1 vuejs简介 1.2 选择器:根据id.class等查找 1.3 静态绑定数据 data 1.4 插值 { ...

  4. vue.js常用指令

    本文摘自:http://www.cnblogs.com/rik28/p/6024425.html Vue.js的常用指令 上面用到的v-model是Vue.js常用的一个指令,那么指令是什么呢? Vu ...

  5. 【Vue】vue.js常用指令

    http://www.cnblogs.com/rik28/p/6024425.html Vue.js的指令是以v-开头的,它们作用于HTML元素,指令提供了一些特殊的特性,将指令绑定在元素上时,指令会 ...

  6. Vue - vue.js 常用指令

    Vue - vue.js 常用指令 目录: 一. vuejs模板语法之常用指令 1. 常用指令: v-html 2. 常用指令: v-text 3. 常用指令: v-for 4. 常用指令: v-if ...

  7. Vue.js 基础指令实例讲解(各种数据绑定、表单渲染大总结)——新手入门、高手进阶

    Vue.js 是一套构建用户界面的渐进式框架.他自身不是一个全能框架--只聚焦于视图层.因此它非常容易学习,非常容易与其它库或已有项目整合.在与相关工具和支持库一起使用时,Vue.js 也能完美地驱动 ...

  8. Vue.js常用指令:v-model

    一.v-model指令 v-model 用来获取表单元素的值.对应input输入框获取的是输入的值,单选按钮.复选框.下拉框获取的是选择的状态. 代码示例如下: <!DOCTYPE html&g ...

  9. Vue.js常用指令:v-on

    一.v-on指令 v-on指令在Vue.js中用来处理对应的事件.用法: v-on:事件类型="函数体" 例如:点击按钮的时候执行play事件 <button v-on:cl ...

  10. Vue.js常用指令:v-show和v-if

    一.v-show指令 v-show指令可以用来动态的控制DOM元素的显示或隐藏.v-show后面跟的是判断条件,语法如下: v-show="判断变量" 例如: v-show=&qu ...

随机推荐

  1. RxJS 系列 – 目录

    请按顺序阅读 概念篇 Observable & Creation Operators Subject Observable to Subject (Hot, Cold, Warm, conne ...

  2. Navicat Premium 12的下载和安装

    首先下载navicate程序以及破解文件,这里一并存到了百度网盘直接下载即可 链接:https://pan.baidu.com/s/1a2QKHHUZ0ej1D78CjQ1ldA提取码:klus 解压 ...

  3. php生成验证码类

    php生成验证码类 直接看代码 <?php session_start(); class Code{ //资源 private $img; //画布宽度 private $width=100; ...

  4. /proc/pids/smaps

    Linux内存管理 -- /proc/{pid}/smaps讲解 基本介绍 /proc/PID/smaps 文件是基于 /proc/PID/maps 的扩展,他展示了一个进程的内存消耗,比同一目录下的 ...

  5. 连接ORACLE数据库,是否必须要安装oracle客户端

    公司升级Oracle版本(12g~19C),服务器端是DBA团队升级.客户端的升级工作由各个团队自己负责完成.突然想为什么Oracle提供的JDBC Driver需要客户端的软件.没有Oracle客户 ...

  6. nginx关于正向代理与反向代理的概念区分

    正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理. 反向代理 反向代理中客户端对 ...

  7. Windows 非服务器版本永久关闭命令行“快速编辑模式”

    使用管理员权限运行cmd.exe 运行如下命令: reg add HKEY_CURRENT_USER\Console /v QuickEdit /t REG_DWORD /d 00000000 /f

  8. 使用MySQL Workbench进行数据库备份

    1.打开MySQL Workbench 2.进行数据库连接配置 如果之前连过,会有历史记录,直接点击需要备份的连接即可 3.进入主界面后,选择左侧的Administration选项卡,然后点击Data ...

  9. 利用 canvas 实现签名效果

    利用 canvas 实现签名效果 使用插件  jSignature  github:https://github.com/brinley/jSignature 如果再H5 中使用需要加载  flash ...

  10. TextIn ParseX文档解析SDK工具新增Java版本

    TextIn ParseX通用文档解析是一款大模型友好的解析工具,支持将pdf文档.jpg.img图像等文件快速转换为markdown格式,支持各类表格.公式解析,帮助大语言模型的数据清洗和文档问答任 ...