• Day2.7 自定义私有指令


    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="../lib/css/bootstrap.min.css">
    <script src="../lib/js/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>
    ID:
    <input type="text" class="form-control" v-model="id">
    </label>
    <label>
    NAME:
    <input type="text" class="form-control" v-model="name">
    </label>
    <!-- 在vue中使用事件绑定机制,为元素指定处理函数时,如果加了括号,就可以给函数传参 -->
    <input type="button" value="添加" class="btn btn-primary" @click="add()">

    <label>
    搜索名称关键字:
    <input type="text" class="form-control" v-model="keywords">
    </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>
    <!-- v-for 中自定义一个方法,把关键字通过传参的形式传递给了 search 方法
    在search 方法内部,通过执行 for 循环,把所有符合 搜索关键字的数据,保存到一个数组中,返回-->
    <tr v-for = 'item in search(keywords)' :key="item.id">
    <td>{{ item.id }}</td>
    <td>{{ item.name }}</td>
    <td>{{ item.ctime | dataFilter }}</td>
    <td>
    <a href="" @click.prevent="del(item.id)">删除</a>
    </td>
    </tr>
    </tbody>
    </table>
    </div>

    <div id="app2">
    <h4 v-fontweight="800"> {{ dt|dataFilter2 }} </h4>
    </div>
    <script>

    //定义全局过滤器进行时间的格式化
    // 全局过滤器所有实例都共享
    Vue.filter('dataFilter',function (dataStr) {
    //根据给定的时间字符串,得到特定的时间
    var dt = new Date(dataStr);

    var y = dt.getFullYear();
    var m = dt.getMonth() + 1;
    var d = dt.getDate();
    // return y + '-' + m + '-' + d;
    return `${y}-${m}-${d}`

    });
    const vm = new Vue({
    el:'#app',
    data:{
    id:'',
    name:'',
    keywords:'',
    list:[
    {id:1,name:'奔驰',ctime:new Date()},
    {id:2,name:'宝马',ctime:new Date()},
    {id:3,name:'保时捷',ctime:new Date()},
    {id:4,name:'路虎',ctime:new Date()},
    {id:5,name:'奥迪',ctime:new Date()},
    ]
    },
    methods:{
    add(){
    // alert('111')
    /**
    * 分析:
    * 1. 获取到ID和name 直接从data上获取
    * 2. 组织出一个对象
    * 3. 把这个对象调用数组的相关方法,添加到当前data上的list中
    * 注意:在 vue 中,已经实现了数据的双向绑定,等我们修改了 data 上的数据,
    * vue 会默认监听数据的改动,自动把最新的数据应用到页面上
    */
    var car = { id:this.id,name:this.name,ctime:new Date() };
    this.list.push(car);
    this.id = this.name = null
    },
    del(id){ // 根据ID删除数据
    /**
    * 分析:
    * 1.如何根据ID找到要删除这一项的索引
    * 2.找到索引了直接调用数组的splice方法
    */
    this.list.some((item,i)=>{
    if(item.id === id){
    this.list.splice(i,1);
    return true
    }
    })
    },
    search(keywords){ //根据关键字,进行数据的搜索
    var newList = [];
    this.list.forEach(item=>{
    if(item.name.indexOf(keywords) != -1){
    newList.push(item)
    }
    });
    return newList
    }
    }
    });




    const vm2 = new Vue({
    el:'#app2',
    data:{
    dt:new Date()
    },
    methods: {},
    // 定义私有过滤器, 两个条件: 过滤器名称 和 处理函数
    // 过滤器调用的时候采用就近原则,如果私有过滤器和全局过滤器名称一致了,这时候优先使用私有过滤器
    // 定义私有过滤器
    filters:{
    dataFilter2:function (dataStr) {
    var dt = new Date(dataStr);

    var y = dt.getFullYear();
    var m = dt.getMonth() + 1;
    var d = dt.getDate();
    // return y + '-' + m + '-' + d;
    return `${y}-${m}-${d}`
    }
    },
    // 自定义私有指令
    directives:{
    'fontweight':{
    bind:function (el,binding) {
    el.style.fontWeight = binding.value
    }
    }

    }
    })
    </script>
    </body>
    </html>
  • 相关阅读:
    Linux 文件和目录的属性
    关于样式加载顺序,js加载顺序
    关于css切换菜单
    jquery插件编写思路
    京东中关于领券地址的安全处理
    把js写到链接a标签的href中和写到onclick中的区别
    京东中关于jsonp的运用
    关于Jquery中ajax方法data参数用法的总结
    js中的延迟加载
    Jquery版Ajax利用JSONP 跨域POST/GET传输数据研究
  • 原文地址:https://www.cnblogs.com/zhaohui-116/p/12007949.html
Copyright © 2020-2023  润新知