商品的添加

代码展示

//HTML代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="vue-dev/dist/vue.js"></script>
    <link rel="stylesheet" href="bootstrap-master/dist/css/bootstrap.css"/>
    <link rel="stylesheet" href="bootstrap-3.3.7-dist/css/bootstrap.css"/>
</head>
<body>
<div id="app">

    <div class="panel panel-primary">
        <div class="panel-heading">
            <h3 class="panel-t">添加品牌</h3>
        </div>
        <!--添加商品-->
        <div class="panel-body form-inline">

            <label>
                Name:
                <input type="text" class="form-control" v-model="Name" @keyup.enter="add">  <!--键盘监听时间只监听enter键-->
            </label>
            <input type="button" value="添加" class="btn btn-primary" @click="add">

            <label>
                搜索关键字:
                <input type="text" class="form-control" v-model="keywords" v-focus v-color="'red'">
                <!-- 自定义指令,如果给它传值,值必须是字符串,则在自定义指令中用binding.value接收 -->
            </label>
        </div>
    </div>

    <!--商品列表-->
    <table class="table table-bordered table-hover table-striped">
        <thead>
        <tr>
            <th>Id</th>
            <th>Name</th>
            <th>Ctime</th>
            <th>Operation</th>
        </tr>
        </thead>
        <tbody>
        <!-- 不直接循环数组,而是通过自定义方法传入新数组 -->
        <!-- 这样列表中显示的内容受搜索关键字的影响,只会显示含有关键字的项 -->
        <tr v-for="item in search(keywords)" :key="item.Id">
            <td v-cloak>{{item.Id}}</td>
            <td v-cloak>{{item.Name}}</td>
            <td v-cloak>{{item.Ctime | dateFormat}}</td>
            <td>
                <a href="#" @click.prevent="del(item.Id)">delete</a>
            </td>
        </tr>
        </tbody>
    </table>
</div>

<script src="js.js"></script>
</body>
</html>

//js代码

//定义一个全局的过滤器,处理时间格式
//在ES6中的字符串方法,String.prototype.padStart(maxLength,fillString="")
//或者String.prototype.padEnd(maxLength,fillString="") 来填充字符串,参数为最大长度,用什么填充
Vue.filter("dateFormat", function () {
    var dt = new Date();
    var y = dt.getFullYear();
    var m = (dt.getMonth() + 1).toString().padStart(2,"0");
    var d = (dt.getDate()).toString().padStart(2,"0");
    var hh = (dt.getHours()).toString().padStart(2,"0");
    var mm = (dt.getMinutes()).toString().padStart(2,"0");
    var ss = (dt.getSeconds()).toString().padStart(2,"0");
    var res = y + "-" + m + "-" + d + " " + hh + ":" + mm + ":" + ss;
    return res;
});

// 自定义全局键盘符
// Vue.config.keyCodes.f2 = 113;

//使用Vue.directive定义全局指令
//注意,在定义时第一个参数是指令名称,但不要加 v- ,而当调用时要加 v-前缀
//参数二是一个对象,存放指令相关的钩子函数
Vue.directive("focus",{
    bind:function (el) {  //当指令绑定到元素上时,会立即执行bind函数,且只执行一次
        //函数参数必然是el,表示被绑定的那个元素,el是一个原生的js对象
        //当一个元素绑定指令时,但还没有插入到DOM中时,调用focus是没有作用的,元素只有被插入到DOM中才会被获得焦点
        el.focus()
    },
    inserted:function (el) {  //当元素插入到DOM中时,会执行一次
        el.focus()
    },
    updated:function (el) {   //VNode更新时,会触发,可执行多次

    }
});

Vue.directive("color",{
    //样式通过指令绑定给元素,不管元素是否插入DOM中,该元素都会有样式
    //binding,钩子函数的第二个参数,是一个对象,包含一些属性
    bind:function (el,binding) {
        el.style.color = binding.value;
    },
    inserted:function () {

    },
    update:function () {

    }
});

var vm = new Vue({
        el: "#app",
        data: {
            Name: '',
            keywords: '',
            ls: []
        },
        methods: {
            add: function () {
                var shop = {Id: this.ls.length + 1, Name: this.Name, Ctime: new Date()};
                this.ls.push(shop);
          this.Name = "" }, del:
function (Id) { //循环数组,判断要删除的Id与数组中的哪个元素Id相同,然后删除这个元素 this.ls.some((item, i) => { /*循环会得到两参数,item数组中每一项,i 索引值*/ if (item.Id == Id) { this.ls.splice(i, 1); return true; } }); //删除一项后,数组每个元素的Id值应该重新计算,循环删除后的数组,并对每一项的Id重新赋值 this.ls.findIndex((item, i) => { item.Id = i + 1; }) }, search(keywords) { var newLs = []; /*自定义一个新的数组,用来存放符合要求的项*/ this.ls.some((item) => { if (item.Name.indexOf(keywords) != -1) { /*判断关键字是否在原数组某一项的Name中*/ newLs.push(item) } }); return newLs; } } });

 

posted @ 2019-09-08 21:29  saber゛  Views(214)  Comments(0Edit  收藏  举报