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. 祝福 Eric 的下一段旅程,Flutter 3.3 现已发布

    Flutter 团队及社区成员们在美丽的城市挪威奥斯陆向您发来问候,我们正在此参加社区举办的 Flutter Vikings 活动,这是一个为期两天的开发技术交流盛会,虽然线下门票已经售罄,但您还可以 ...

  2. o1 式开源推理链项目 g1:可基于 Llama 3.2-90b 模型

    g1 简介 g1 是一个开源项目,利用 Llama 3.1 70b 模型在 Groq 硬件上实现类似 OpenAI o1 的推理链能力.项目通过精心设计的提示策略引导语言模型进行逐步推理,解决了传统语 ...

  3. 获取sql语句

    1.$model->_sql(); 方法实际执行的就是 $model->getLastSql(); 2.fetchSql fetchSql用于直接返回SQL而不是执行查询,适用于任何的CU ...

  4. 04-react的基本:条件渲染

    import reactDom from "react-dom" // 条件渲染 if else let loading = false // 写一个函数用于加载 const lo ...

  5. kotlin协程——>异常处理

    异常处理 本节内容涵盖了异常处理与在异常上取消.我们已经知道取消协程会在挂起点抛出 CancellationException 并且它会被协程的机制所忽略.在这⾥我们会看看在取消过程中抛出异常或同 ⼀ ...

  6. KubeSphere 社区双周报 | 苏州 Meetup 报名开启 | 2023.11.23-12.07

    KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...

  7. 容器部署DNS你会吗?

    docker快速部署DNS,实现快速上线 概念 环境介绍 部署DNS 下载相关镜像 创建并启动DNS容器 简单介绍三种创建方式 容器启动停止 创建dns交互式容器 配置DNS容器相关配置 测试 修改客 ...

  8. 一文了解 Conda(包教包会,不会留言)

    Conda 使用指南 Conda 是一个开源包管理和环境管理系统,能够以跨平台的方式进行软件包的安装.管理和依赖管理,特别适用于 Python 和 R 语言的环境管理.本文整理了常见 Conda 命令 ...

  9. css flex布局的使用

    felx弹性布局 display:flex; 属性值 flex-direction 属性定义容器要在哪个方向上堆叠 flex 项目.默认为水平方向 row, column 值设置垂直方向.如:flex ...

  10. Win11安装基于WSL2的Ubuntu

    1. 概述 趁着还没有完全忘记,详细记录一下在Win11下安装基于WSL2的Ubuntu的详细过程.不得不说WLS2现在被微软开发的比较强大了,还是很值得安装和使用的,笔者就通过WLS2安装的Ubun ...