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>