Vue品牌案例

Vue完成品牌列表案例

添加功能

实现效果:
在这里插入图片描述
1、画表格
在vs code的扩展中安装Bootstrap 3 Snippets,就可以使用快捷键bs3-table快速创建表格
2、将model中的数据渲染到表格中。使用v-for循环data中的对象

<tr v-for="item in list" :key="item.id">

3、实现添加功能
使用bs3-panel:primary快速创建面板。点击添加按钮时,获取到id和name文本框的值,将值组合成对象,添加到数组中去。

<div class="panel-body form-inline">
                <label>
                    Id:
                    <input type="text" class="form-control" v-model="id">
                </label>
                <label>
                    Name:
                    <input type="text" class="form-control" v-model="name" @keyup.enter="add">
                </label>
                <!-- 在vue中,使用事件绑定机制,为元素指定处理函数时,如果加了小括号,就可以给函数传参 -->
                <input type="button" value="添加" class="btn btn-primary" @click="add()">
            el:'#app',
            data:{
                id: '',
                name: ''
                list:[
                    {id: 1, name: '奔驰', ctime: new Date()},
                    {id: 2, name: '宝马', ctime: new Date()}
                ]
            },
            methods:{
                add(){
                 // 分析:1.获取id和name,直接从data上面获取
                 // 2.组织出一个对象
                 // 3.把这个对象,调用数组的相关方法,添加到当前data上的list中
                 // 4.注意:在vue中,已经实现了数据的双向绑定,每当我们修改了data中的数据,vue会默认监听到数据的改动,自动把最新的数据应用到页面上
                 var car = {id: this.id, name: this.name, ctime: new Date()}
                 this.list.push(car)
                 this.id = this.name = ''  //添加完之后文本框清空
                },

删除功能

1、给删除绑定事件
2、根据id删除数据

<a href="" @click.prevent="del(item.id)">删除</a>

3、写del()方法
some():用于检测数组中的元素是否满足指定条件

  • 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
  • 如果没有满足条件的元素,则返回false。

splice(): 参数一从第i个位置开始删除,参数二删除几个元素,参数三要插入的数据

del(id){
         //分析: 1.如何根据id,找到要删除这一项的索引
         // 2. 如果找到索引,直接调用数组的splice方法
         this.list.some((item, i) => {
             if(item.id == id){
                 this.list.splice(i,1)
                 //在数组的some方法中,如果return true,就会立即终止这个数组的后续循环
                 return true;
             }
         })

                },

搜索关键字功能

1、之前, v-for中的数据,都是直接从data上的list中直接渲染过来的
2、现在,我们自定义一个search方法,同时把所有关键字,通过传参的形式,传递给search方法
3、在search方法内部,通过执行for循环list内的数据,把所有符合搜索关键字的数据,保存到一个新的数组中,返回

search(keywords){
              var newList = []
               this.list.forEach(item => {
                   if(item.name.indexOf(keywords) != -1){
                      newList.push(item)
                   }
            })
            return newList
 }

时间格式的处理

vue.js允许自定义过滤器,被用作一些常见的文本格式化。过滤器可用在两个地方:mustache插值和v-bind表达式。

过滤器调用的格式

{{ name | 过滤器的名称}}

过滤器的定义语法

Vue.filter(‘过滤器的名称’, function(data){})
过滤器中的function,第一个参数,已经被规定死,永远都是过滤器管道符前面传递过来的数据。
过滤器可有多个,可多次调用

过滤器的基本使用

<body>
    <div id="app">
        <p>{{ msg | msgFormat('疯狂', '123') | test}}</p>
    </div>
    <script>
        Vue.filter('msgFormat', function(msg, arg, arg2){
            //字符串的replace方法,第一个参数,除了可写一个字符串之外,还可以定义一个正则
            return msg.replace(/单纯/g, arg+arg2)
        })

        Vue.filter('test', function(msg){
            return msg+'====='
        })

        var vm = new Vue({
            el:'#app',
            data:{
                msg:'曾经,我也是一个单纯的少年,单纯的我,傻傻的问,谁是世界上最单纯的男人'
            },
            methods:{}
        });
    </script>
</body>

格式化时间的全局过滤器

全局过滤器被所有Vue实例共享
将获取的时间统一变成小写,获取年月日小时分钟秒

<td>{{ item.ctime | dateFormat('yyyy-MM-dd') }}</td>
<script>
        //全局过滤器,进行时间的格式化
        //所谓的全局过滤器,就是所有的vm实例都共享的
        Vue.filter('dateFormat', function(datestr, pattern){
            //根据特定的时间字符串,得到特定的时间
            var dt = new Date(datestr)

            //yyyy-mm-dd
            var y = dt.getFullYear()
            var m = dt.getMonth() + 1
            var d = dt.getDate()           

            if(pattern & pattern.toLowerCase() === 'yyyy-mm-dd'){
                return `${y}-${m}-${d}`
            }
            else{
                var hh = dt.getHours()
                var mm = dt.getMinutes()
                var ss = dt.getSeconds()
                return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
            }
            
        })
 </script>

格式化时间的私有过滤器

filters在这里是对象。私有过滤器filters要加s,全局没有s
过滤器调用的时候,采用的是就近原则,如果私有过滤器和全局过滤器名称一致,优先调用私有过滤器

var vm2 = new Vue({
            el: '#app2',
            data:{
                dt: new Date()
            },
            methods: {

            },
            filters: {  //定义私有过滤器  过滤器有两个条件  【过滤器名称和处理函数】
            //过滤器调用的时候,采用的是就近原则,如果私有过滤器和全局过滤器名称一致,优先调用私有过滤器
                dateFormat: function(datestr, pattern = ''){
                var dt = new Date(datestr)
                //yyyy-mm-dd
                var y = dt.getFullYear()
                var m = (dt.getMonth() + 1).toString().padStart(2,'0')
                var d = (dt.getDate()).toString().padStart(2,'0')

            

                if(pattern & pattern.toLowerCase() === 'yyyy-mm-dd'){
                    return `${y}-${m}-${d}`
                }
                else{
                    var hh = dt.getHours().toString().padStart(2,'0')
                    var mm = dt.getMinutes().toString().padStart(2,'0')
                    var ss = dt.getSeconds().toString().padStart(2,'0')
                    return `${y}-${m}-${d} ${hh}:${mm}:${ss}~~~~~`
                }
                }
            }
        })
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值