Vue--过滤器、指令、插件
常用下载js的网址:
https://www.bootcdn.cn/
https://www.jsdelivr.com/


一、过滤器
vue 允许自定义过滤器,用于格式化一些常见文本(如日期等)。
1、如何创建
(1)直接使用 Vue.filter() 来创建一个过滤器(全局过滤器)。
Vue.filter('filterA ', function (value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
})
new Vue({
// ...
})
(2)在 vue 内部使用 filters 来创建一个过滤器(局部过滤器)。
new Vue({
// ...
filters: {
filterA : function (value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
}
}
})
2、如何使用
(1)使用双大括号。
{{ message | filterA }}
(2)使用 v-bind 表达式
<div v-bind:id="message | filterA "></div>
(3)过滤器可以串联。
{{ message | filterA | filterB }}
(4)过滤器是 JavaScript 函数,因此可以接收参数。
{{ message | filterA('arg1', 'arg2') }}
3、举例(过滤日期)
moment.js是一个JavaScript日期处理类库, 官网地址: http://momentjs.cn/
【举例:】
<!doctype html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="demo">
<p>{{newDate}}</p>
<p>{{newDate | filterA}}</p>
<p>{{newDate | filterB}}</p>
<p>{{newDate | filterA | filterB}}</p>
<p :id="message | filterA ">{{newDate | filterC(format)}}</p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<!--moment.js是一个JavaScript日期处理类库, 官网地址: http://momentjs.cn/-->
<script src="https://cdn.bootcss.com/moment.js/2.24.0/moment.js"></script>
<script type="text/javascript">
Vue.filter('filterA', function(value){
return moment(value).format("MM-DD-YYYY");
}) var vm = new Vue({
el: '#demo',
data: {
newDate: new Date(),
format: 'HH:mm Z'
},
filters: {
filterB: function(value){
return moment(value).format("YYYY-MM-DD HH:mm Z");
},
// 使用形参默认值,如arg无值,则使用默认值
filterC: function(value, arg='YYYY-MM-DD HH:mm Z'){
return moment(value).format(arg);
}
}
})
</script>
</body> </html>

二、指令
1、内置指令
【分类:】
1、v-text: 用于更新元素的文本内容(textContent)。
2、v-html: 用于更新元素的html内容(innerHTML)。
3、v-if: 为true时,显示在页面上。
4、v-else: 与v-if相对应。
5、v-show: 通过display来控制标签的显示与隐藏。
6、v-for: 用于遍历数组或者对象。
7、v-on: 用于绑定事件监听,简写为 @。
8、v-bind: 用于绑定属性并解析表达式,简写为 :。
9、v-model:用于数据的双向绑定,通常用于input标签。
10、v-cloak: 用于防止闪现表达式,一般使用{{}}表达式时,会先显示{{}},然后再被转换。使用v-cloak可以先不显示{{}},直接被解析转换。
v-cloak通常与css配合,即使用属性选择器选中v-cloak,然后将其隐藏(display:none)。
11、ref: 用于唯一标识某个标签,通过vue对象的$refs来表示。 【举例:(v-cloak, ref, v-click)】
<!doctype html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style type="text/css">
/* 使用属性选择器,定位到 v-cloak属性 ,并将其隐藏*/
[v-cloak]{
display: none;
}
</style>
</head>
<body>
<div id="demo">
<!-- 根据ref定位某个标签,并改变标签的内容 -->
<p ref="change1">{{message}}</p>
<!--由于先扫描文本再解析,即会先显示{{}},然后再转换,造成闪现的情况,
可以先将标签隐藏,当解析完成后,v-cloak 会失效,此时标签会显示出来,从而解决闪现问题-->
<p ref="change2" v-cloak>{{message}}</p>
<button @click="change1">Change1</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<script type="text/javascript">
var vm = new Vue({
el: '#demo',
data: {
message: 'hello'
},
methods: {
change1(){
this.$refs.change1.textContent += ' world'
}
}
})
</script>
</body> </html>
2、自定义指令
(1)创建方式:
方式一:使用 Vue.directive() 去创建指令(全局指令)。
// 注册一个全局自定义指令 `v-focus`
Vue.directive('focus', function(el, binding){ }
}) 【注:】
el:指令所绑定的元素,可以用来直接操作 DOM 。
binding:一个对象,包含以下属性:
name:指令名,不包括 v- 前缀。
value:指令的绑定值,例如:v-my-directive="1 + 1" 中,绑定值为 2。
oldValue:指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
expression:字符串形式的指令表达式。例如 v-my-directive="1 + 1" 中,表达式为 "1 + 1"。
arg:传给指令的参数,可选。例如 v-my-directive:foo 中,参数为 "foo"。
modifiers:一个包含修饰符的对象。例如:v-my-directive.foo.bar 中,修饰符对象为 { foo: true, bar: true }。
方式二:在 vue 内部使用 directives 来创建一个指令(局部指令)。
directives: {
focus:function(el, binding){
}
}
(2)举例:
【举例:】
<!doctype html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style type="text/css">
/* 使用属性选择器,定位到 v-cloak属性 ,并将其隐藏*/
[v-cloak]{
display: none;
}
</style>
</head>
<body>
<div id="demo">
<p v-to-upper-text="message" v-cloak="">Hello World</p>
<p v-to-lower-text="message" v-cloak="">Hello World</p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<script type="text/javascript">
Vue.directive('to-upper-text', function(el, binding){
el.textContent = binding.value.toUpperCase();
}) var vm = new Vue({
el: '#demo',
data: {
message: 'hello'
},
directives:{
// 包含了特殊字符 - ,所以需要使用引号括起来
'to-lower-text':function(el, binding){
el.textContent = binding.value.toLowerCase()
}
}
})
</script>
</body> </html>

三、插件
1、插件的功能
(1)添加全局方法或者属性。如: vue-custom-element
(2)添加全局资源:指令/过滤器/过渡等。如 vue-touch
(3)通过全局混入来添加一些组件选项。如 vue-router
(4)添加 Vue 实例方法,通过把它们添加到 Vue.prototype 上实现。
(5)一个库,提供自己的 API,同时提供上面提到的一个或多个功能。如 vue-router
2、开发插件
(1)首先得自定义一个js文件,通常命名为 vue-插件名.js
(2)在js文件内部,定义一个install方法,其第一个参数是 Vue 构造器,第二个参数是一个可选的选项对象。方法内部,可以自定义指令、全局方法、属性等。
(3)举例:
【举例:】
/*
vue插件库
* */
(function() {
// 定义一个向外暴露的插件对象,用于被调用
var MyPlugin = {} // 必须存在一个install方法
MyPlugin.install = function(Vue, options) {
// 1. 添加全局方法或属性
Vue.myGlobalMethod = function() {
// 逻辑...
console.log("全局方法,即vue函数对象的方法")
} // 2. 添加全局资源
Vue.directive('my-directive',
function(el, binding, vnode, oldVnode) {
// 逻辑...
console.log("全局资源,自定义指令")
el.textContent = binding.value.toUpperCase()
}
) // 3. 注入组件选项
Vue.mixin({
created: function() {
// 逻辑...
}
}) // 4. 添加实例方法,绑定在Vue.prototype上
Vue.prototype.$myMethod = function(methodOptions) {
// 逻辑...
console.log("vue的实例方法")
}
} // 向外暴露插件对象
window.MyPlugin = MyPlugin
})()
3、使用插件
(1)导入自定义的插件js文件。
(2)通过全局方法 Vue.use() 使用插件。它需要在你调用 new Vue() 启动应用之前完成。Vue.use() 会自动阻止注册相同的插件,即使多次调用,也只执行一次。
// Vue.use(MyPlugin)其内部会 调用 MyPlugin.install(Vue)
Vue.use(MyPlugin)
或者 // 传入一个可选的选项对象
Vue.use(MyPlugin, { someOption: true }) new Vue({
// ...组件选项
})
(2)举例:
【举例:】
<!doctype html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="demo">
<p v-my-directive="message">Hello</p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<script src="./js/vue-myPlugin.js"></script>
<script type="text/javascript">
// 声明使用的插件对象
Vue.use(MyPlugin) // 调用自定义的全局方法
Vue.myGlobalMethod() var vm = new Vue({
el: '#demo',
data: {
message: 'hello'
}
}) // 调用实例方法
vm.$myMethod()
</script>
</body> </html>

Vue--过滤器、指令、插件的更多相关文章
- vue之自定义插件
1.插件的作用 插件通常会为 Vue 添加全局功能,一般是添加全局方法/全局指令/过滤器等 Vue 插件有一个公开方法 install ,通过 install 方法给 Vue 添加全局功能 通过全局方 ...
- vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
今天分享的不是技术,今天给大家分享个插件,针对现有的vue右键菜单插件,大多数都是需要使用插件本身自定义的标签,很多地方不方便,可扩展性也很低,所以我决定写了一款自定义指令调用右键菜单(vuerigh ...
- vue之指令篇 ps简单的对比angular
这两天在开始vue的大型项目,发现和ng还是有许多不同,这里对比下两者的指令系统 难度系数:ng的指令难度大于vue:至少vue上暂时没发现@&=:require,compile,precom ...
- 每个人都能实现的vue自定义指令
前文 先来bb一堆废话哈哈.. 用vue做项目也有一年多了.除了用别人的插件之外.自己也没尝试去封装指令插件之类的东西来用. 刚好最近在项目中遇到一个问题.(快速点击按钮多次触发多次绑定的方法),于是 ...
- 黑马vue---31-32、vue过滤器实例
黑马vue---31-32.vue过滤器实例 一.总结 一句话总结: vue内部的东西,无论是过滤器还是组件,都是键值对的方式 1.过滤器的定义语法? Vue.filter('过滤器的名称', fun ...
- 浅析vue封装自定义插件
在使用vue的过程中,经常会用到Vue.use,但是大部分对它一知半解,不了解在调用的时候具体做了什么,因此,本文简要概述下在vue中,如何封装自定义插件. 在开始之前,先补充一句,其实利用vue封装 ...
- vue自定义指令实例使用(实例说明自定义指令的作用)
在写vue项目的时候,我们经常需要对后台返回的数据进行大量的渲染操作,其中就包含了大量的对特殊数据的进一步处理,比如说时间戳.图片地址.特殊数据显示等等特殊数据处理改进. 其实遇到这种情况,通过Vue ...
- vue自定义指令
Vue自定义指令: Vue.directive('myDr', function (el, binding) { el.onclick =function(){ binding.value(); } ...
- Vue 过滤器的使用
Vue官方文档是这样说的:Vue过滤器用于格式化一些常见的文本. 在实际项目中的使用: 定义过滤器 在src定义一个filter.js文件,里面定义过滤器函数,在最后要使用 exprot defaul ...
- Vue 自定义一个插件的用法、小案例及在项目中的应用
1.开发插件 install有两个参数,第一个是Vue构造器,第二个参数是一个可选的选项对象 MyPlugin.install = function (Vue, options) { // 1 ...
随机推荐
- Java方法之参数传递机制
目录 Java方法之参数传递机制 基本数据类型 引用数据类型 综合练习 总结 Java方法之参数传递机制 Java方法中如果声明了形参,在调用方法时就必须给这些形参指定参数值,实际传进去的这个值就叫做 ...
- python进程基础点整理
操作系统 串行: 一个程序完完整整的执行完再执行下一个 并发: 看起来像是同时运行,其实就是程序间的切换频率比较快,看不出来 并行:真正的同时运行 多道技术 空间复用:共用一个内存条,多个进程相互隔离 ...
- Mybatis+Spring框架整合
1.整合思路 1.SqlSessionFactory对象应该放到spring容器中作为单例存在. 2.传统dao的开发方式中,应该从spring容器中获得sqlsession对象. 3.Mapper代 ...
- ASP.NET MVC IOC依赖注入之Autofac系列(一)- MVC当中应用
话不多说,直入主题看我们的解决方案结构: 分别对上面的工程进行简单的说明: 1.TianYa.DotNetShare.Model:为demo的实体层 2.TianYa.DotNetShare.Repo ...
- javaWeb核心技术第十二篇之分页和条件
分页:limit ?,? 参数1 : startIndex 开始索引. 参数2 : pageSize 每页显示的个数 n 表示第几页 给定一个特殊的单词 pageNumber select * fro ...
- ubuntu上的安装.netcore2.1
.net core 在ubuntu上安装比较容易,依次执行正面语句即可 sudo apt-get install curl curl https://packages.microsoft.com/ke ...
- iOS常用算法之单链表查找倒数第n个节点(图解)
拿到题目, 首先要先了解链表数据结构, 如下图: 常规思路: 利用数组, 遍历整个单链表, 将每个节点装入数组中, 最终拿到数组根据索引(数组长度-1-n)就得到了倒数第n个元素, 这里要注意从数组中 ...
- OPENGL 入门
检测设备支持版本,判断是否支持opengl 2.0版本 初始化设置OpenGLES2.0 实现接口GLSurfaceView.Renderer 渲染 绘制图形 1.检测设备支持版本,判断是否支持ope ...
- mssql sqlserver 如何编写case when 多条件呢?
摘要: 下文讲述case when中多条件的编写方法,如下所示: 实验环境:sql server 2008 R2 case when 多条件编写方法 case when多条件编写语法: case ...
- DropDownList绑定数据源后,要插入项的处理
private void BindDivision() { DivisionService divisionService = new DivisionService(); var divisions ...