Vue 品牌管理

文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>品牌管理</title>
    <link rel="stylesheet" href="css/bootstrap.min.css">
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
    <div class="panel  panel-primary">
        <div class="panel-heading">
            <h3 class="panel-title">品牌管理</h3>
        </div>
        <div class="panel-body form-inline">
            <label>编号:<input type="text" class="form-control" v-model="id"></label>
            <label>品牌名称:<input type="text" class="form-control" v-model="name" @keyup.enter="add"></label>
            <input type="button" value="添加" class="btn btn-primary" @click="add">
            <label>搜索:<input type="text" class="form-control" placeholder="按品牌名称搜索,如“奔驰" v-model="keywords" id="search" v-focus v-color="'red'"></label>
        </div>
    </div>
    <table class="table table-bordered table-striped">
        <thead>
            <tr>
                <td>编号</td>
                <td>品牌名称</td>
                <td>时间</td>
                <td>操作</td>
            </tr>
        </thead>
        <tbody>
            <tr v-for="item in Search(keywords)" :key="item.id">
                <td>{{item.id}}</td>
                <td>{{item.name}}</td>
                <td>{{item.ctime | dataFormat('') }}</td>
                <td><a href="" @click.prevent="del(item.id)">删除</a></td>
            </tr>
        </tbody>
    </table>
</div>
<script type="text/javascript" src="js/Brand.js"></script>
</body>
</html>

文件

// 第一种 全局过滤器转换时间
/*Vue.filter("dataFormat",function (dataStr,pattern) {
    var dt = new Date(dataStr);
    //年月日
    var y = dt.getFullYear();
    var m = dt.getMonth()+1;
    var d = dt.getDate();

    if(pattern.toLowerCase()=="yyyy-mm-dd"){
        return `${y}-${m}-${d}`
    }else{
        hh = dt.getHours();
        mm = dt.getMinutes();
        ss = dt.getSeconds();
        if(mm<10){
            mm = '0'+mm;
        }
        if(ss<10){
            ss = '0'+ss;
        }
        return  `${y}-${m}-${d} ${hh}:${mm}:${ss}`
    }
});*/
//使用Vue.directive()定义全局指令 v-focus
Vue.directive('focus',{
    bind:function (el) {
        //每当指令绑定到元素上时,会立即执行这个bind函数,只执行一次
        // el.focus() //在每个函数中,第一个参数,永远是el,表示被绑定了指令的哪个元素,这个el参数,是一个原生的JS对象
    },
    inserted:function (el) {
        //inserted表示元素 插入到Dom中的时候,会执行inserted函数【触发一次】
        el.focus();
    },
    updated:function (el) {
        //当VNode更新的时候,会执行updated,可能会触发多次
    }
});
//设置自定义颜色指令
Vue.directive('color',{
    bind:function (el,binding) {
        //样式只要通过指令绑定给了元素,不管这个元素有没有被插入到页面中去,这个元素肯定有了一个内联样式
        //钩子函数
        el.style.color=binding.value;
    }
});
var app =new Vue({
    el:"#app",
    data:{
        list:[
            {id:1,name:'奔驰',ctime:new Date()},
            {id:2,name:'法拉利',ctime:new Date()},
            {id:3,name:'兰博基尼',ctime:new Date()}
        ],
        id:"",
        name:"",
        ctime:new Date(),
        keywords:"",
        dataFormat:""
    },
    methods: {
        add:function () {
            var car = {id:this.id,name:this.name,ctime:this.ctime};
            this.list.push(car);
            this.name=this.id="";
        },
        del:function (id) {
            //第一种方法
            /*this.list.some((item,i)=>{
                if(item.id==id){
                    this.list.splice(i,1);
                    return true;
                }
            })*/

            //第二种
            var index = this.list.findIndex(item=>{
                if(item.id==id){
                    return true;
                }
            });
            this.list.splice(index,1);
        },
        Search:function (keywords) {
            var newlist = [];
            //第一种匹配方法
            /*this.list.forEach(item=>{
                if(item.name.indexOf(keywords)!=-1){
                    newlist.push(item);
                }
            });
            return newlist;*/

            //第二种匹配方法
            this.list.filter(item=>{
                if(item.name.includes(keywords)){
                    newlist.push(item);
                }
            });
            return newlist;

        }
    },
    //第二种 局部过滤器转换时间格式,过滤器调用采样就近原则,如果全局和私有过滤器都存在,优先使用私有的
    filters:{
        dataFormat: function (dataStr,pattern) {
            var dt = new Date(dataStr);
            //年月日
            var y = dt.getFullYear();
            var m = (dt.getMonth()+1).toString().padStart(2,"0");
            var d = dt.getDate().toString().padStart(2,"0");

            if(pattern.toLowerCase()=="yyyy-mm-dd"){
                return `${y}-${m}-${d}`
            }else{
                hh = dt.getHours().toString().padStart(2,"0");
                mm = dt.getMinutes().toString().padStart(2,"0");
                ss = dt.getSeconds().toString().padStart(2,"0");
                //第一种让一位数的时候前面加0填充
                /*if(mm<10){
                    mm = '0'+mm;
                }
                if(ss<10){
                    ss = '0'+ss;
                }*/
                return  `${y}-${m}-${d} ${hh}:${mm}:${ss}`
            }
        }
    }
});

github链接:https://github.com/Pg-Man/vue-Brand.git
效果截图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值