自定义过滤器及开发插件

本文是我在学习过程中记录学习的点点滴滴,目的是为了学完之后巩固一下顺便也和大家分享一下,日后忘记了也可以方便快速的复习。


前言

今天主要学习的是关于自定义全局过滤器和局部过滤器的方法技能和自己开发插件的一般方法技能。

一、自定义全局过滤器

1.1、过滤器是什么?

概念:用来对 vue 中的属性或数据进行过滤,即在显示之前进行数据处理或筛选

作用:过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持)
语法:
{{data|filter(参数) }
注意:data 实际上是 filter 的第一个参数(隐性参数),参数是 第 2 个及后面的参数

用法示例:

<!-- 在双花括号中 -->
{{ message | capitalize }}
<!-- 在 `v-bind` 中 -->
<div v-bind:id="rawId | formatId"></div>

1.2、自定义全局过滤器及使用

使用全局方法 Vue.filter(过滤器 ID,过滤器执行的函数),所谓全局方法就是在多个实例中都可以使用。比如再定义一个 new Vue({}), 这个实例挂载的元素中也可以使用。
过滤器执行的函数一般建议用箭头函数来表示(就是lambda
表达式写法)

注意:过滤器要先定义,然后再 new vue 实例,否则会失效且 报错。(也就是过滤器要写在 new Vue()前面哦)

<div id="app">
<h3>{{8|addZero}}</h3>
<h3>{{12.345678|filterNum(3)}}</h3>
<h3>{{12.045|filterNum(2)}}</h3>
<h3>{{12.3051|filterNum(2)}}</h3>
</div>
<script>
//自定义过滤器,当数字为 1 位数字时,在前面加 0,变成 2 位数
//过滤器执行的函数第一个参数 data 就表示要过滤处理的数据(隐性参数),过滤器名称后面还可以有很多个参数,这个含义就要具体根据过滤器的不同决定
Vue.filter("addZero", function (data) {
// console.log(data);//data 就表示要格式化的数据,此处就8
return data<10?"0"+data:data;
})
//过滤器执行的函数用箭头函数表示,对 data 保留 n 位小数
Vue.filter("filterNum",(data,n)=>{
// console.log(data,n)
return data.toFixed(n);//toFixed 是 js 的一个固有方法,用来保留几位小数的,参数就是要保留的几位小数
// 注意:当要保留 2 位数字时,第 3 位数字为 5,且 5 后面不再有数字时,不进位,有数字且为 1 及以上就进位

})
var vm = new Vue({
el: "#app", data: {
}
})
</script>

结果:在这里插入图片描述

addZero是自定义的方法,filterNum是js的内置函数,其后面的参数是要保留的小数,改方法当要保留 2 位数字时,第 3 位数字为 5,且 5 后面不再有数字时,不进位,有数字且为 1 及以上就进位,其余以此类推。

二、自定义局部过滤器

局部过滤器就是写在实例内部,通过 filters 选项设置,只能应用在对应的 vue 实例挂载的 dom 上 。

<div id="app">
<!-- 下面用过滤器方法来实现字符串的倒置 formatmy 为过滤
器,formatmy 在下面 vue 实例中定义-->
{{ msg | formatmy }}
</div>
<script>
new Vue({
el: "#app",
data: {
msg:'hello vue' },filters: {
// 此处 vaule 就是表示 formatmy 要修饰的字符串,即是msg ;过滤器也就是一个方法,因此下面的function代码去掉也行(简写方法)
formatmy: function (value) {
return value.split("").reverse().join("")
}
/* formatmy: value=>{
return value.split("").reverse().join("")
} */
}
});
</script>

运行结果:
在这里插入图片描述

说明:如果觉得自己写过滤器函数麻烦,也可以使用第三方工具库,里面有很多函数,与过滤器功能类似。都是些 js 文件,引入就可以用了。如:
(1)lodash:里面的函数基本带有下划线开头,俗称下划线库。
(2)date-fns。要对日期进行操作,可以使用 date-fns 工具库【date-fns 是一个现代的 JavaScript 日期工具类库,提供了最全面、最简单和一致的工具集,用于在浏览器和 Node.js 中操作JavaScript 日期。】
(3)Accounting.js。用来将一个数字格式化为货币格式
在简单项目中一般不会使用,在需要使用的时候,你记得有,再去具体查找资料看下就可

三、开发插件

作用:
【官网】插件通常用来为 Vue 添加全局功能。插件的功能范围没有严格的限制——一般有下面几种:
(1)添加全局方法或者属性。如: vue-custom-element
(2)添加全局资源:指令/过滤器/过渡等。如 vue-touch
(3)通过全局混入来添加一些组件选项。如 vue-router
( 4 ) 添 加 Vue 实 例 方 法 , 通 过 把 它 们 添 加
到 Vue.prototype 上实现。

3.1、如何使用插件

通过全局方法 Vue.use() 使用插件。它需要在你调用 new
Vue() 启动应用之前完成:

// 调用 `MyPlugin.install(Vue)` Vue.use(MyPlugin)
new Vue({
// ...组件选项
})

也可以传入一个可选的选项对象:

Vue.use(MyPlugin, { someOption: true })

3.1、开发插件

Vue.js 的插件应该暴露一个 install 方法。这个方法的第一个参数是 Vue 构造器,第二个参数是一个可选的选项对象:

MyPlugin.install = function (Vue, options) {
// 1. 添加全局方法或属性
Vue.myGlobalMethod = function () {
// 逻辑... }
// 2. 添加全局资源
Vue.directive('my-directive', {
bind (el, binding, vnode, oldVnode) {
// 逻辑... }
... })
// 3. 注入组件选项
Vue.mixin({
created: function () {
// 逻辑... }
... })
// 4. 添加实例方法
Vue.prototype.$myMethod = function (methodOptions) {
// 逻辑... }
}

vue 官网给我们提供了 Vue-Router、Vuex 等插件,下面我们来开发一个插件。

定义插件 plugin.js,一般是一个 js 文件,放在 js 文件夹下。固定格式:
(function(){

})()

plugin.js具体代码:

(function(){
// 先声明自己开发的插件对象 MyPlugin
const MyPlugin={}
//一定要通过一个 install 方法进行定义,可理解为外面调用这个插
件就是去安装这个插件
MyPlugin.install = function (Vue, options) {
// 1. 添加全局方法或属性
Vue.myGlobalMethod = function () {
// 逻辑要看你想实现什么功能,这里简单测试
alert('MyPlugin 插件的全局方法 myGlobalMethod 被调用了')
}
// 2. 添加全局指令
Vue.directive('my-directive', {
inserted (el, binding) {//钩子函数 bind 换为 inserted
// 逻辑... //binding.value 就获取到绑定到指令上的值
el.innerHTML="MyPlugin 插件的指令 my-directive 被调用
了"+binding.value
}
})
// 3. 添加实例方法,Vue.prototype 得到 Vue 的原型,
$myMethod 为方法名,$不能少
Vue.prototype.$myMethod = function (methodOptions) {
// 逻辑... alert('Vue 实例的方法 myMethod 被调用了')
}
// 4.定义全局过滤器,首字母大写
Vue.filter("upcase", function(value) {
// value 为 null 就什么都不做
if (!value) return '' value = value.toString()
// slice 表示从第 1 个字符取后面所有的
return value.charAt(0).toUpperCase() + value.slice(1)
})
}
//最后还要将插件暴露出来,即将插件添加到 window 对象,固定格式
window.MyPlugin=MyPlugin
})()//最后这个()不能少,让它立即执行

主代码:

<script src="js/vue.js"></script>
<!-- 导入插件 plugin.js ,而且前面要先导入 vue.js,因为插件开发过
程中就需要用到 Vue-->
<script src="js/plugin.js"></script>
</head>
<body>
<div id="app">
<!-- v-一定要加在自定义指令最前面 -->
<span v-my-directive="msg"></span>
<h3>{{msg|upcase}}</h3>
</div>
<script>
// 引入插件 MyPlugin,MuPlugin 两端没有单引号,实质就是去安装 MyPlugin 插件
Vue.use(MyPlugin)
var vm = new Vue({
el: "#app", data: {
msg: "hello world"
}
});
// 调用 vue 实例的方法,注意是 vm 调用,不是 Vue,因为不是全局方法,是实例方法
vm.$myMethod("徐照兴")
// 调用 Vue 的全局方法,注意这里是 Vue,而不能用 vm,因为是全局的方法
Vue.myGlobalMethod()
</script>
</body>

结果:
运行结果:弹出二个弹框,并在页面上显示【MyPlugin 插件的指令my-directive 被调用了 helloworld】
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Superset是一个开源的数据可视化和探索平台,它提供了丰富的功能和灵活的扩展性。在Superset中,筛选器(Filter)是一种用于过滤数据的组件,可以帮助用户根据特定条件对数据进行筛选和分析。 如果你想进行Superset筛选器的二次开发,你可以按照以下步骤进行: 1. 了解Superset的架构和扩展机制:Superset是基于Python和Flask框架构建的,它使用了SQLAlchemy作为ORM(对象关系映射)工具,并且支持自定义插件和扩展。在开始二次开发之前,你需要熟悉Superset的基本架构和扩展机制。 2. 确定二次开发的目标:在开始二次开发之前,你需要明确你想要实现的功能或者改进的地方。例如,你可能想要添加新的筛选器类型、修改现有筛选器的行为,或者增加一些自定义的筛选器选项。 3. 编写自定义筛选器代码:根据你的目标,你可以编写自定义的筛选器代码。在Superset中,筛选器是通过继承`BaseFilter`类来实现的。你可以创建一个新的类,并重写相应的方法来实现你想要的功能。例如,你可以重写`apply`方法来定义筛选器的行为。 4. 注册自定义筛选器:完成自定义筛选器的编写后,你需要将其注册到Superset中。你可以在Superset的配置文件中添加相应的配置,将你的自定义筛选器与Superset关联起来。 5. 测试和调试:在完成注册后,你可以重新启动Superset,并测试你的自定义筛选器是否按照预期工作。如果有问题,你可以进行调试并进行必要的修复。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小福仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值