常用下载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--过滤器、指令、插件的更多相关文章

  1. vue之自定义插件

    1.插件的作用 插件通常会为 Vue 添加全局功能,一般是添加全局方法/全局指令/过滤器等 Vue 插件有一个公开方法 install ,通过 install 方法给 Vue 添加全局功能 通过全局方 ...

  2. vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单

    今天分享的不是技术,今天给大家分享个插件,针对现有的vue右键菜单插件,大多数都是需要使用插件本身自定义的标签,很多地方不方便,可扩展性也很低,所以我决定写了一款自定义指令调用右键菜单(vuerigh ...

  3. vue之指令篇 ps简单的对比angular

    这两天在开始vue的大型项目,发现和ng还是有许多不同,这里对比下两者的指令系统 难度系数:ng的指令难度大于vue:至少vue上暂时没发现@&=:require,compile,precom ...

  4. 每个人都能实现的vue自定义指令

    前文 先来bb一堆废话哈哈.. 用vue做项目也有一年多了.除了用别人的插件之外.自己也没尝试去封装指令插件之类的东西来用. 刚好最近在项目中遇到一个问题.(快速点击按钮多次触发多次绑定的方法),于是 ...

  5. 黑马vue---31-32、vue过滤器实例

    黑马vue---31-32.vue过滤器实例 一.总结 一句话总结: vue内部的东西,无论是过滤器还是组件,都是键值对的方式 1.过滤器的定义语法? Vue.filter('过滤器的名称', fun ...

  6. 浅析vue封装自定义插件

    在使用vue的过程中,经常会用到Vue.use,但是大部分对它一知半解,不了解在调用的时候具体做了什么,因此,本文简要概述下在vue中,如何封装自定义插件. 在开始之前,先补充一句,其实利用vue封装 ...

  7. vue自定义指令实例使用(实例说明自定义指令的作用)

    在写vue项目的时候,我们经常需要对后台返回的数据进行大量的渲染操作,其中就包含了大量的对特殊数据的进一步处理,比如说时间戳.图片地址.特殊数据显示等等特殊数据处理改进. 其实遇到这种情况,通过Vue ...

  8. vue自定义指令

    Vue自定义指令: Vue.directive('myDr', function (el, binding) { el.onclick =function(){ binding.value(); } ...

  9. Vue 过滤器的使用

    Vue官方文档是这样说的:Vue过滤器用于格式化一些常见的文本. 在实际项目中的使用: 定义过滤器 在src定义一个filter.js文件,里面定义过滤器函数,在最后要使用 exprot defaul ...

  10. Vue 自定义一个插件的用法、小案例及在项目中的应用

    1.开发插件 install有两个参数,第一个是Vue构造器,第二个参数是一个可选的选项对象   MyPlugin.install = function (Vue, options) {   // 1 ...

随机推荐

  1. Java描述设计模式(05):原型模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.原型模式简介 1.基础概念 原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出 ...

  2. [算法]实现strStr()

    题目 实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始).如果不存在 ...

  3. SpringCloud的入门学习之Eureka(高可用注册中心HA)构建Provider服务、Consumer服务

    1.在高可用的Eureka注册中心中构建provider服务. 使用springboot的多环境配置,来搭建Eureka的高可用集群式部署.由于使用的是maven构建的springboot项目,所以首 ...

  4. goweb-搭建服务

    web应用简介 Web 应用在我们的生活中无处不在.看看我们日常使用的各个应用程序,它们要 么是 Web 应用,要么是移动 App 这类 Web 应用的变种.无论哪一种编程语言,只要 它能够开发出与人 ...

  5. ABP入门教程11 - 展示层实现增删改查-视图

    点这里进入ABP入门教程目录 创建目录 在展示层(即JD.CRS.Web.Mvc)的Views下新建文件夹Course //用以存放Course相关视图 创建视图 在JD.CRS.Web.Mvc/Vi ...

  6. 高级语言——java

    高级语言——java 起源与发展 1991 年,James Gosling 博士发布产品 Oak,这是 Java 语言的前身. 1995 年,Oak 语言改名为 Java. 1996 年,JDK(Ja ...

  7. ElasticSearch7 设置外网访问失败

    elasticsearch外网访问9200端口失败,bootstrap checks failed,the default discovery settings are unsuitable for ...

  8. Mac打开Finder快捷键

    摘要:目前网络中较常见的打开Finder的方法有两种,要么是先进入桌面状态,再使用快捷键command + shift + c:要么是通过下载软件来设置打开Finder的快捷键.都过于繁琐,其实有很简 ...

  9. Codeforces Round #588 (Div. 2)

    传送门 A. Dawid and Bags of Candies 乱搞. Code #include <bits/stdc++.h> #define MP make_pair #defin ...

  10. MYSQL 命令导出事件、存储过程、触发器

    普通导出某个数据库 mysqldump -u username -p passowrd databasename > file.sql 顺便导出事件 使用 –events 参数 mysqldum ...