vue : 生命周期钩子 +自定义过滤器 +自定义指令

2017-10-25  本文已影响0人  Dream_丹丹

生命周运算期钩子

生命周期钩子函数

生命周期钩子函数视图.png
  1. 初始之前 / 初始之后
  1. 挂载之前 / 挂载之后
  1. 更新之前 / 更新之后
  1. 销毁之前 / 销毁之后
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>声明周期钩子</title>
    <link rel="stylesheet" href="bootstrap.css">
</head>
<body> 
    <div id="app">
        <div>
            <button 
                @click="change"
                type="button" 
                class="btn btn-info btn-lg"
            >
                点击更新
            </button>
            <h1>{{msg}}</h1>
        </div>
    </div>
    <script src="vue.js"></script>
    <script>
        let vm = new Vue({
            el: '#app',
            data:{
                msg: 'Hello World !'
            },
            methods: {
                change(){
                    this.msg = '数据更新';
                }
            },
            beforeCreate(){
                alert('初始之前');
            },
            created(){
                alert('初始之后');
            },
            beforeMount(){
                alert('挂载之前');
            },
            mounted(){
                alert('挂载之后');
            },
            beforeUpdate(){
                alert('更新之前');
            },
            updated(){
                alert('更新之后');
            },
            beforeDestroy(){
                alert('销毁之前');
            },
            destroyed(){
                alert('销毁之后');
            }
        });
        
        // 在以上三个状态正确调用后使用
        // vm.$destroy();
        
    </script>
</body>
</html>

下面为代码执行的状态

  1. 初始之前


    初始之前.png
  2. 初始之后


    初始之后.png
  3. 挂载之前


    挂载之前.png
  4. 挂载之后,点击确定后正常显示页面


    挂载之后.png
    挂载之后点击确定,正常显示页面.png
  5. 更新之前


    点击跟新按钮之后-更新之前.png
  6. 更新之后,点击确定后页面更新


    更新之后.png
    确定数据更新之后.png
  7. 销毁之前


    销毁之前.png
  8. 销毁之后


    销毁之后.png

自定义过滤器

demo

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自定义过滤器</title>
    <link rel="stylesheet" href="bootstrap.css">
    <style>
        [v-cloak]{
            display: none;
        }
    </style>
</head>
<body>
    <div id="app" v-cloak>
        <div class="container" style="padding: 50px 0;">
            <ul class="list-group h3">
                <li v-for="(item,i) in lists" :class="{active:index===i}" class="list-group-item">{{item | suffix}}</li>
            </ul>
        </div>
    </div>
    <script src="vue.js"></script>
    <script>
        Vue.filter('suffix',val=>(`¥${val}.00 元`));
        let vm = new Vue({
            el: "#app",
            data:{
                lists: [100,200,300,400,500],
                index: 0
            }
        })
    </script>
</body>
</html>

浏览器渲染结果:


自定义过滤器.png
自定义过滤器就相当于自定了一个模板,优化代码,提高代码的重用性

自定义指令

demo 1

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自定义指令-drag</title>
    <style>
        span{
            position: absolute;
            display: inline-block;
            top: 100px;
            left: 100px;
            margin: 20px;
            width: 100px;
            height: 100px;
            background: red;
        }
    </style>
</head>
<body>
    <div id="app">
        <span class="drag" v-drag></span>
    </div>
    <script src="vue.js"></script>
    <script>
        Vue.directive('drag',el=>{
            console.log(el);
            el.onmousedown = e=>{
                let disX = e.clientX - el.offsetLeft;
                let disY = e.clientY - el.offsetTop;
                document.onmousemove = e=>{
                    el.style.left = e.clientX - disX + 'px';
                    el.style.top = e.clientY - disY + 'px';
                };
                document.onmouseup = e=>{
                    document.onmousemove = null;
                    document.onmouseup = null;
                }
            }
        })
        let vm = new Vue({
            el: "#app"
        })
    </script>
</body>
</html>

页面渲染结果:

自定义指令-drag.png arguments打印结果.png

demo 2

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <h1 v-border="blue">sdljlsjd</h1>
    </div>
    <script src="vue.js"></script>
    <script>
        Vue.directive('border',function($1,$2){
            console.log(arguments);
            $1.style.border = `dashed 2px ${$2.value}`;
        })
        let vm = new Vue({
            el: '#app',
            data: {
                blue: 'red'
            }
        })
    </script>
</body>
</html>

页面渲染结果:


自定义指令.png

自定义动画

<transition name="move">
  <div></div>
</transition>
<transition-group name="move">
  <div v-for="(item,i)" key="item._id">
    <span></span>
    <p></p>
  </div>
 </transition-group>
<transition 
  enter-active-class="animated fadeInUp" 
  leave-active-class="animated fadeOutDown
>
  <div></div>
<transition>
<transition-group 
  enter-active-class="animated fadeInLeft"
  leave-active-class="animated fadeInRight"
>
  <div key="1"></div>
  <div key="2"></div>
</transition-group>
上一篇 下一篇

猜你喜欢

热点阅读