Vue组件--局部过滤器 和 局部自定义指令

注意:     局部过滤器 和 局部自定义指令 需要在组件内部定义,并且只有当前组件才可以使用,组件外无效

1.  定义局部过滤器

使用filters来定义,他是一个对象,里面是以过滤器名称为名的一个函数,它time是默认的参数,即需要过滤的数据。示例如下

 1 <body>
 2   <div id="app">
 3     <one></one>  <!--应用组件 -->
 4     <two></two>
 5   </div>
 6   <script>
 7     //定义组件 one
 8     Vue.component(‘one‘, {
 9       data() {
10         return {
11           time: new Date()
12         }
13       },
14       // ES6中语法中 用 ``
15       template: `
16         <div>
17           <p>{{time | formatTime}}</p>
18           输入框1:<input type="text">
19         </div>
20         `,
21         //定义局部的时间过滤器  使用filters来定义,他是一个对象,time是默认的参数,即需要过滤的数据
22         filters: {   //注意 此处是filters 不是filter
23           formatTime(time){
24             var y = time.getFullYear();
25             var m = time.getMonth() + 1;
26             var d = time.getDate();
27             return y + ‘/‘ + m + ‘/‘ + d;
28           }
29         }
30     })
31     //定义组件 two
32     Vue.component(‘two‘, {
33       data(){
34         return {
35           time: new Date()
36         }
37       },
38       template: `
39         <div>
40           <p>{{time | formatTime}}</p>  //因为过滤器是在 one 组件中定义的 所以组件 two 中无法使用 即此处的时间无法格式化
41           输入框2:<input type="text">
42         </div>
43       `
44     })
45     var vm = new Vue({
46       el: ‘#app‘,
47       data: {
48
49       },
50     })
51   </script>
52 </body>

页面效果:    因为过滤器是在 one 组件中定义的 所以组件 two 中无法使用 即此处的时间无法格式化

2. 局部自定义指令

局部自定义指令通过在组件内部使用directives属性来创建,它也是一个对象,里面是指令的名称,把他定义为一个对象,对象里面是一个钩子函数 inserted, 他有两个参数,el表示使用自定义指令的元素,binding表示自定义指令的信息。 示例如下

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4   <meta charset="UTF-8">
 5   <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6   <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7   <title>局部(过滤器和自定义指令)</title>
 8   <script src="js/vue2.js"></script>
 9 </head>
10 <body>
11   <div id="app">
12     <one></one>  <!--应用组件 -->
13     <two></two>
14   </div>
15   <script>
16     //定义组件 one
17     Vue.component(‘one‘, {
18       data() {
19         return {
20           time: new Date()
21         }
22       },
23       // ES6中语法中 用 ``
24       template: `
25         <div>
26           <p>{{time | formatTime}}</p>
27           输入框1:<input type="text">
28         </div>
29         `,
30         //定义局部的时间过滤器  使用filters来定义,他是一个对象,time是默认的参数,即需要过滤的数据
31         filters: {   //注意 此处是filters 不是filter
32           formatTime(time){
33             var y = time.getFullYear();
34             var m = time.getMonth() + 1;
35             var d = time.getDate();
36             return y + ‘/‘ + m + ‘/‘ + d;
37           }
38         }
39     })
40     //定义组件 two   局部自定义指令通过在组件内部使用directives属性来创建  它也是一个对象,里面是指令的名称,把他定义为一个对象,对象里面是一个钩子函数 inserted,          他有两个参数,el表示使用自定义指令的元素,binding表示自定义指令的信息
41     Vue.component(‘two‘, {
42       data(){
43         return {
44           time: new Date()
45         }
46       },
47       template: `
48         <div>
49           <p>{{time}}</p>
50           输入框2:<input type="text" v-myfocus>
51         </div>
52       `,
53       directives: {
54         myfocus: {
55           inserted(el, binding){
56             console.log(el)
57             console.log(binding)
58             el.focus()  // 为元素调用自动获取焦点的方法
59           }
60         }
61       }
62     })
63     var vm = new Vue({
64       el: ‘#app‘,
65       data: {
66
67       },
68     })
69   </script>
70 </body>
71 </html>

页面效果:  由于是在two组件中定义的自定义指令myfocus, 所以输入框2会自动获取焦点,而输入框1 则不能。另,inserted钩子函数中的参数 el 表示使用自定义指令的元素,binding 表示自定义指令的信息.

3.  定义一个全局的自定义指令,与局部自定义指令对比

全局自定义指令: 通过 directive 定义

1 //定义一个全局的自定义指令  全局之定义指令在所有组件中都可以使用
2     Vue.directive(‘mycolor‘, {
3       inserted(el, binding){
4         //binding.value可获得自定义指令中属性的值
5         el.style.color = binding.value;
6       }
7     })

局部自定义指令:通过 directives 定义

1      directives: {
2         myfocus: {
3           inserted(el, binding){
4             console.log(el)
5             console.log(binding)
6             el.focus()  // 为元素调用自动获取焦点的方法
7           }
8         }
9       }

应用自定义属性

4. 全部代码展示:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4   <meta charset="UTF-8">
 5   <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6   <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7   <title>局部(过滤器和自定义指令)</title>
 8   <script src="js/vue2.js"></script>
 9 </head>
10 <body>
11   <div id="app">
12     <one></one>  <!--应用组件 -->
13     <two></two>
14   </div>
15   <script>
16     //定义组件 one
17     Vue.component(‘one‘, {
18       data() {
19         return {
20           time: new Date(),
21           color: ‘red‘,
22         }
23       },
24       // ES6中语法中 用 ``
25       template: `
26         <div>
27           <p>{{time | formatTime}}</p>
28           输入框1:<input type="text" v-mycolor=‘color‘>
29         </div>
30         `,
31         //定义局部的时间过滤器  使用filters来定义,他是一个对象,time是默认的参数,即需要过滤的数据
32         filters: {   //注意 此处是filters 不是filter
33           formatTime(time){
34             var y = time.getFullYear();
35             var m = time.getMonth() + 1;
36             var d = time.getDate();
37             return y + ‘/‘ + m + ‘/‘ + d;
38           }
39         }
40     })
41     //定义组件 two   局部自定义指令通过在组件内部使用directives属性来创建  它也是一个对象,里面是指令的名称,把他定义为一个对象,对象里面是一个钩子函数 inserted, 他有两个参数,el表示使用自定义指令的元素,binding表示自定义指令的信息
42     Vue.component(‘two‘, {
43       data(){
44         return {
45           time: new Date(),
46           color: ‘#f00‘,
47         }
48       },
49       template: `
50         <div>
51           <p>{{time}}</p>
52           输入框2:<input type="text" v-myfocus v-mycolor=‘color‘>
53         </div>
54       `,
55       directives: {
56         myfocus: {
57           inserted(el, binding){
58             console.log(el)
59             console.log(binding)
60             el.focus()  // 为元素调用自动获取焦点的方法
61           }
62         }
63       }
64     })
65     //定义一个全局的自定义指令  全局之定义指令在所有组件中都可以使用
66     // Vue.directive(‘mycolor‘, {
67     //   inserted(el, binding){
68     //     //binding.value可获得自定义指令中属性的值
69     //     el.style.color = binding.value;
70     //   }
71     // })
72     var vm = new Vue({
73       el: ‘#app‘,
74       data: {
75
76       },
77     })
78   </script>
79 </body>
80 </html>

原文地址:https://www.cnblogs.com/lirun-rainbow/p/10357248.html

时间: 2024-10-06 20:56:01

Vue组件--局部过滤器 和 局部自定义指令的相关文章

Vue.js学习 Item13 – 指令系统与自定义指令

基础 除了内置指令,Vue.js 也允许注册自定义指令.自定义指令提供一种机制将数据的变化映射为 DOM 行为. 可以用 Vue.directive(id, definition) 方法注册一个全局自定义指令,它接收两个参数指令 ID 与定义对象.也可以用组件的 directives 选项注册一个局部自定义指令. 钩子函数 定义对象可以提供几个钩子函数(都是可选的): bind:只调用一次,在指令第一次绑定到元素上时调用. update: 在 bind 之后立即以初始值为参数第一次调用,之后每当

手写vue中v-bind:style效果的自定义指令

自定义指令 什么是自定义指令 以 v- 为前缀,然后加上自己定义好的名字组成的一个指令就是自定义指令.为什么要有自定义指令呢?在有些时候,你仍然需要对普通的DOM元素进行底层的操作,这个时候就可以用到自定义指令. 自定义指令的语法 全局自定义指令 // 注册一个全局自定义指令 `v-focus` Vue.directive('focus', { // 当被绑定的元素插入到 DOM 中时-- inserted: function (el) { // 聚焦元素 el.focus() } }) 局部自

[vue]vue条件渲染v-if(template)和自定义指令directives

条件渲染: v-if/template <div id="app"> <h1>v-show: display: none</h1> <div v-show="false">yes</div> <!--<div v-else>no</div>--> <h1>v-for: 判断1</h1> <div v-if="false"&

vue 组件 全局注册和局部注册

全局注册,注册的组件需要在初始化根实例之前注册了组件: 局部注册,通过使用组件实例选项注册,可以使组件仅在另一个组件或者实例的作用域中可用: 全局组件 js Vue.component('tab-title',{ props:['title'], template:'<li v-on:click="$emit(\'change\')">{{title}}</li>' }) Vue.component('tab-content',{ props:['content

vue 组件 全局注册与局部注册的方法

全局注册 html部分 <div id="e1"><name1></name1></div> script部分 <script type="text/javascript"> Vue.component('name1', { template: '<div>我是效果</div>'})   //定义全局模板        例如 Vue.component(tagName, option

vue内置指令与自定义指令

一.内置指令 1.v-bind:响应并更新DOM特性:例如:v-bind:href  v-bind:class  v-bind:title  v-bind:bb 2.v-on:用于监听DOM事件: 例如:v-on:click  v-on:keyup 3.v-model:数据双向绑定:用于表单输入等:例如:<input v-model="message"> 4.v-show:条件渲染指令,为DOM设置css的style属性 5.v-if:条件渲染指令,动态在DOM内添加或删除

Vue基础(环境配置、内部指令、全局API、选项、内置组件)

1.环境配置 安装VsCode 安装包管理工具:直接下载 NodeJS 进行安装即可,NodeJS自带 Npm 包管理工具,下载地址:https://nodejs.org/en/download/安装完成后在命令行执行以下命令查看npm包管理器版本 npm -v npm中文文档:https://www.npmjs.cn/ 配置淘宝镜像 npm install cnpm -g --registry=https://registry.npm.taobao.org 然后执行 cnpm -v 查看版本信

Vue2.0笔记——自定义指令

自定义指令 自定义指令主要用于,除系统提供外,自己对DOM的底层操作.例如当页面加载时需要将一个文本框为自动获得焦点.只要你在打开这个页面后还没点击过任何内容,这个输入框就应当还是处于聚焦状态. 我们通过全局自定义指令和局部自定义指令来讲解autofouce案例. 全局自定义指令 在全局API中通过Vue.directive( id, [definition] )来注册或获取全局指令.参数: id表示自定义的指令名称 definition为自定义指令的定义,一般可以含有几个生命周期钩子函数 bi

20-基础-自定义指令-局部自定义指令

<!DOCTYPE html> <html> <head> <meta charset='UTF-8'> <meta name='viewport' content='width=device-width,initial-scale=1.0'> <meta http-equiv='X-UA-Compatible' content='ie=edge'> <title>Document</title> </h