Vue 自定义按键修饰符,自定义指令,自定义过滤器

  1 <!DOCTYPE html>
  2 <html>
  3     <head>
  4         <meta charset="utf-8">
  5         <title></title>
  6         <link rel="stylesheet" type="text/css" href="./css/bootstrap.css" />
  7         <script src="../vue.js" type="text/javascript" charset="utf-8"></script>
  8     </head>
  9     <body>
 10         <div id="app">
 11 
 12             <div class="panel panel-primary">
 13                 <div class="panel-heading">
 14                     <h3 class="panel-title">demo</h3>
 15                 </div>
 16                 <div class="panel-body form-inline">
 17                     <label>Id:
 18                         <input type="text" calss="from-control" v-model="id">
 19                     </label>
 20 
 21                     <label>Name:
 22                         <input type="text" calss="from-control" v-model="name" @keyup.f2="add()">
 23                     </label>
 24 
 25                     <input type="button" value="添加" class="btn btn-primary" @click="add">
 26 
 27                     <label>搜索名称关键字:
 28                         <input type="text" calss="from-control" v-model="keyword" v-focus v-color="'blue'">
 29                     </label>
 30 
 31                 </div>
 32             </div>
 33 
 34             <table class="table table-bordered table-hover table-striped" border="" cellspacing="" cellpadding="">
 35                 <thead>
 36                     <tr>
 37                         <th>Id</th>
 38                         <th>Name</th>
 39                         <th>Ctime</th>
 40                         <th>操作</th>
 41                     </tr>
 42                 </thead>
 43                 <tbody>
 44                     <tr v-for="item in search(keyword)" :key="item.id">
 45                         <td v-cloak>{{item.id}}</td>
 46                         <td v-text="item.name"></td>
 47                         <td>{{ item.ctime | dataFormat("") }}</td>
 48                         <td>
 49                             <a @click.prevent="del(item.id)">删除</a>
 50                         </td>
 51                     </tr>
 52                 </tbody>
 53 
 54             </table>
 55         </div>
 56 
 57         <div id="app2">
 58             <h3 v-color="'pink'" v-fontweight="'900'" v-fontsize ="'70'" >{{ msg | dataFormat2 }}</h3>
 59         </div>
 60 
 61         <script type="text/javascript">
 62             
 63             // 自定义键盘按键 按键修饰符
 64             Vue.config.keyCodes.f2 = 113;
 65 
 66 
 67             // 自定义全局指令
 68             Vue.directive('focus', {
 69                 bind: function(el) { //每当指令绑定到元素上的时候,会立即执行这个bind函数,只执行一次
 70                     //在每个函数中,第一个参数永远是el,表示被绑定了指令的那个元素,这个el参数,是一个原生的js对象
 71                     //在元素刚绑定指令的时候,还没有插入到DOM中去,这时候,调用foucs方法没有作用
 72                     el.focus();
 73                 },
 74                 inserted: function(el) { //表示元素插入到dom中的时候,会执行inserted函数,值触发一次
 75                     el.focus();
 76                 },
 77                 updated: function() { //当VNode更新的时候,会执行updated函数,可能会触发多次
 78 
 79                 }
 80             });
 81 
 82             Vue.directive('color', {
 83                 // bind(el, binding, vnode) {
 84                 //     el.style.arg = binding.value.arg;
 85                 // },
 86                 bind(el, binding) {
 87                     el.style.color = binding.value;
 88                 }
 89             });
 90 
 91 
 92             //定义给一个全局的时间格式化 过滤器
 93             Vue.filter("dataFormat", function(dataStr, pattern) {
 94                 var dt = new Date(dataStr);
 95                 var y = dt.getFullYear();
 96                 var m = dt.getMonth() + 1;
 97                 var d = dt.getDate();
 98 
 99                 if (pattern && pattern.toLowerCase() == "yyyy-mm-dd") {
100                     return `${y}-${m}-${d}`;
101                 } else {
102                     var hh = dt.getHours();
103                     var mm = dt.getMinutes();
104                     var ss = dt.getSeconds();
105                     return `${y}-${m}-${d} ${hh}:${mm}:${ss}`;
106                 }
107 
108 
109             })
110 
111             var vm = new Vue({
112                 el: "#app",
113                 data: {
114                     id: "",
115                     name: "",
116                     key: "",
117                     keyword: "",
118                     list: [{
119                             id: 1,
120                             name: "奔驰",
121                             ctime: new Date()
122                         },
123                         {
124                             id: 2,
125                             name: "宝马",
126                             ctime: new Date()
127                         }
128                     ]
129                 },
130                 methods: {
131                     add: function() {
132                         var str = {
133                             id: this.id,
134                             name: this.name,
135                             ctime: new Date()
136                         };
137                         this.list.push(str);
138                         this.id = "";
139                         this.name = "";
140                     },
141                     del: function(id) {
142 
143                         this.list.some(((item, i) => {
144                             if (item.id == id) {
145                                 this.list.splice(i, 1);
146                                 return true;
147                             }
148 
149                         }))
150 
151                         // var index = this.list.findIndex( (item) => {
152                         //     if(item.id == id){
153                         //         return true;
154                         //     }
155                         // })
156                         // console.log(index);
157                         // 
158                         // this.list.splice(index, 1);
159                     },
160                     search(keyword) {
161                         //var newlist = [];
162 
163 
164                         // this.list.forEach(item=>{
165                         //     if(item.name.indexOf(keyword) != -1){
166                         //         newlist.push(item);
167                         //     }
168                         // });
169 
170                         return this.list.filter(item => {
171                             // if (item.name.indexOf(keyword) != -1) {
172                             //     newlist.push(item);
173                             // }
174                             if (item.name.includes(keyword)) {
175                                 return item;
176                             }
177                         })
178 
179 
180                         //return newlist;
181                     }
182                 }
183             })
184             
185             
186 
187             var vm2 = new Vue({
188                 el: "#app2",
189                 data: {
190                     msg: new Date()
191                 },
192                 //自定义私有过滤器
193                 filters: {
194                     dataFormat2: function(dataStr, pattern) {
195                         var dt = new Date(dataStr);
196                         var y = dt.getFullYear();
197                         var m = dt.getMonth() + 1;
198                         var d = dt.getDate();
199 
200                         if (pattern && pattern.toLowerCase() == "yyyy-mm-dd") {
201                             return `${y}-${m}-${d}`;
202                         } else {
203                             var hh = dt.getHours();
204                             var mm = dt.getMinutes().toString().padStart(2, "0");
205                             var ss = dt.getSeconds().toString().padStart(2, "0");
206                             return `${y}-${m}-${d} ${hh}:${mm}:${ss}`;
207                         }
208                     }
209                 },
210                 // 自定义私有指令
211                 directives: {
212                     fontweight: {
213                         bind: function (el,binding){
214                             el.style.fontWeight = binding.value;
215                             console.log(binding.value)
216                         }
217                     },
218                     fontsize: function(el, binding) {
219                         el.style.fontSize = binding.value + "px";
220                     }
221                 }
222             })
223         </script>
224     </body>
225 </html>

 

posted @ 2019-09-16 15:46  养一只Tom猫  阅读(442)  评论(0编辑  收藏  举报