【Vue】小项目之品牌案例

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>Document</title>
  6.     <!-- 1.引入vue -->
  7.     <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
  8.     <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
  9.     <style type="text/css">
  10.     </style>
  11. </head>
  12. <body>
  13.     <div id="app">
  14.         <div class="panel panel-primary">
  15.             <div class="panel-heading">
  16.                 <h3 class="panel-title">添加品牌</h3>
  17.             </div>
  18.             <div class="panel-body form-inline">
  19.                 <label>
  20.                     Id:
  21.                     <input type="text" name="" class="form-control" v-model ="id"> 
  22.                 </label>
  23.                 <label>
  24.                     Name:
  25.                     <input type="text" name="" class="form-control" v-model="name" v-on:keyup.enter.f2="add">
  26.                 </label>
  27.                 <input type="button" value="添加" name="" class="btn btn-primary" v-on:click = "add">
  28.                 <label>
  29.                     搜索名称关键字:
  30.                     <input type="text" name="" class="form-control" v-model="keywords" v-focus>
  31.                 </label>
  32.             </div>
  33.         </div>
  34.  
  35.         <table class="table table-bordered table-hover table-striped"> 
  36.             <thead>
  37.                 <tr>
  38.                     <th>Id</th>
  39.                     <th>Name</th>
  40.                     <th>Ctime</th>
  41.                     <th>Operation</th>
  42.                 </tr>
  43.             </thead>
  44.             <tbody>
  45.                 <tr v-for="item in search(keywords)" v-bind:key="item.id">
  46.                     <td>{{item.id}}</td>
  47.                     <td v-text = "item.name"></td>
  48.                     <td>{{item.ctime | dataFormat("") }}</td>
  49.                     <td>
  50.                         <a href="" v-on:click.prevent="del(item.id)">删除</a>
  51.                     </td>
  52.                 </tr>
  53.             </tbody>
  54.         </table>            
  55.     </div>
  56.     <div id="app2">
  57.         <h3  v-bind:style  = "styleObj"v-color="'pink'" v-fontweight = "900">{{dt | dataFormat("")}}</h3>
  58.     </div>
  59.     <script type="text/javascript">
  60.         // 自定义全局按键修饰符
  61.         Vue.config.keyCodes.f2 = 113
  62.  
  63.         //定义全局的指令
  64.         Vue.directive("focus",{
  65.             bind:function(el){ //每当指令绑定到元素上的时候,会立即执行这个bind函数,只执行一次
  66.                                 //注意:在每个函数中,第一个参数永远都是el,表示被绑定了指令的那个元素,这个el元素,是一个js原生对象
  67.                                 //在元素刚绑定指令的时候,还没有插入到DOM中去,这时候调用focus方法没有作业,
  68.                                 //因为bind一个元素只有插入DOM之后才能获取焦点
  69.             },
  70.             inserted:function(el){ //inserted表示元素插入到DOM中的时候,会执行instered函数,这个函数只会执行一次
  71.                 el.focus()
  72.             },
  73.             updated:function(el){ //当VNode更新的时候,会执行update,可能会触发多次
  74.             }
  75.         });
  76.         Vue.directive("color",{
  77.             bind:function(el,binding){
  78.                 el.style.color =  binding.value
  79.                 console.log("ok")
  80.                 
  81.             }
  82.         })
  83.         //全局的过滤器 格式化时间
  84.         Vue.filter("dataFormat",function(dataStr,pattern){
  85.             var dt = new Date(dataStr)
  86.             var y = dt.getFullYear()
  87.             var m = dt.getMonth()+1
  88.             var d = dt.getDate()
  89.             // return y+"-"+m+"-"+d
  90.             
  91.             if (pattern && pattern.toLowerCase() === "yyyy-mm-dd"){
  92.                 return `${y}-${m}-${d}` //es6 
  93.             }else {
  94.                 var hh = dt.getHours()
  95.                 var mm = dt.getMinutes()
  96.                 var ss = dt.getSeconds()
  97.                 return `${y}-${m}-${d}-${hh}-${mm}-${ss}`
  98.             }
  99.         } )
  100.         //定义一个私有的过滤器
  101.         var vm2 = new Vue({
  102.             el:"#app2",
  103.             data:{
  104.                 dt:new Date(),
  105.                 styleObj:{
  106.                     fontSize:"90px"
  107.                 }
  108.             },
  109.             methods:{},
  110.             filters:{
  111.                 dataFormat:function(dataStr,pattern){
  112.                     var dt = new Date(dataStr)
  113.                     var y = dt.getFullYear()
  114.                     var m = (dt.getMonth()+1).toString().padStart(2,"0")//用es6将字符串填充至两位,如6-->06
  115.                     var d = (dt.getDate()).toString().padStart(2,"0")
  116.                     if (pattern && pattern.toLowerCase() === "yyyy-mm-dd"){
  117.                         return `${y}-${m}-${d}` //es6 
  118.                         }else {
  119.                             var hh = dt.getHours().toString().padStart(2,"0")
  120.                             var mm = dt.getMinutes().toString().padStart(2,"0")
  121.                             var ss = dt.getSeconds().toString().padStart(2,"0")
  122.                             return `${y}-${m}-${d}-${hh}-${mm}-${ss}~~~~~~~~~`
  123.             }
  124.                 }
  125.             },
  126.             directives:{ //自定义私有指令
  127.                 "fontweight":{
  128.                     bind:function(el,binding){
  129.                         el.style.fontWeight = binding.value;
  130.                     }
  131.                 }
  132.             }
  133.         })
  134.         
  135.  
  136.         var vm = new Vue({
  137.             el:"#app",
  138.             data:{
  139.                 id:"",
  140.                 name:"",
  141.                 keywords:"",
  142.                 list:[{
  143.                     id:1,name:"奔驰",ctime:new Date()
  144.                 },
  145.                 {
  146.                     id:2,name:"宝马",ctime:new Date()
  147.                 }]
  148.             },
  149.             methods:{
  150.                 add:function(){
  151.                     // console.log("ok")
  152.                     var car = {id:this.id,name:this.name,ctime:new Date()}
  153.                     this.list.push(car)
  154.                     this.id=''
  155.                     this.name=''
  156.                 },
  157.                 del:function(id){
  158.                     var index = this.list.findIndex(item=>{
  159.                         if (item.id==id){
  160.                             return true;
  161.                         }
  162.                     })
  163.                     this.list.splice(index,1)
  164.                 },
  165.                 /*
  166.                 search:function(keywords){ //根据关键字进行数据的搜索的第一种方法
  167.                     var newList = []
  168.                     this.list.forEach(item =>{
  169.                         if(item.name.indexOf(keywords) !=-1){
  170.                             newList.push(item)
  171.                         }
  172.                     })
  173.                     return newList;
  174.                 }*/
  175.                 search:function(keywords){
  176.                     
  177.                 return     this.list.filter(item=>{
  178.                         if (item.name.includes(keywords)){
  179.                             return item
  180.                         }
  181.                     })
  182.                 }
  183.             }
  184.         })
  185.         
  186.     </script>
  187. </body>
  188. </html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值