• vuebase-6.自定义指令


    一个指令定义对象可以提供如下几个钩子函数 (均为可选):

    • bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。

    • inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。

    • update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)

    • componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用.
    • unbind:只调用一次,指令与元素解绑时调用。
    • 接下来我们来看一下钩子函数的参数 (即 elbindingvnode 和 oldVnode)。

    2.全局指令,全局可以调用;局部指令;只在局部作用域下有效

    局部自定义指令:

    <template>
    <div class="animtes">

    <input type="text" v-focus>
    <p v-myStyle>自定义指令的样式</p>
    </div>
    </template>

    <script>
    export default {
    name: "animtes",
    data() {
    return {
    show: true,
    flag:true,
    flag1:true,
    flag2:true
    }
    },
    methods: {

    },
    directives:{
    focus:{
    inserted:function(el){
    el.focus();
    }
    },
    myStyle:{
    inserted:function(el){
    el.style.fontSize="50px";
    el.style.color="blue"
    }
    }
    }
    }
    </script>

    <style lang="css" scoped>
    /* .fade-enter-active,
    .fade-leave-active {
    transition: opacity .5s;
    }

    .fade-enter,
    .fade-leave-to


    {
    opacity: 0;
    } */
    /* .fade-leave-active below version 2.1.8 */
    /* 0的状态*/
    .ve-enter,
    .ve-leave-to{
    opacity: 0;
    }
    /* 1的状态*/
    .ve-enter-to,
    .ve-leave{
    opacity: 1;
    }
    /* 过渡*/
    .ve-enter-active,
    .ve-leave-active{
    transition:opacity 0.5s;
    }

    .ves{
    200px;
    height:200px;
    background-color:red;
    text-align:center;
    font-size:20px;
    }
    /* 0的状态*/
    .ves-enter,
    .ves-leave-to{
    opacity: 0;
    0;
    height:0;
    }
    /* 1的状态*/
    .ves-enter-to,
    .ves-leave{
    opacity: 1;
    height:200px;
    200px;
    }
    /* 过渡*/
    .ves-enter-active,
    .ves-leave-active{
    transition:all 1s;
    }
    /* ***********************************vesf********************************/
    /* 0的状态*/
    .vesf-enter,
    .vesf-leave-to{
    }
    /* 1的状态*/
    .vesf-enter-to,
    .vesf-leave{
    }
    /* 过渡*/
    .vesf-enter-active{
    animation:bounce-in 0.5s;
    }
    .vesf-leave-active{
    animation:bounce-in 0.5s reverse;
    }
    @keyframes bounce-in {
    0% {
    transform: scale(0);
    }
    50% {
    transform: scale(1.5);
    }
    100% {
    transform: scale(1);
    }
    }
    @keyframes bounce-out {
    0% {
    transform: scale(1);
    }
    50% {
    transform: scale(1.5);
    }
    100% {
    transform: scale(0);
    }
    }
    </style>

    全局自定义指令----------------------------------------------------------------------------------------------------------------------------------------------

    // The Vue build version to load with the `import` command
    // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
    import Vue from 'vue'
    import App from './App'

    Vue.config.productionTip = false
    //自定义指令
    Vue.directive("focus",{
    //当前的生命周期
    inserted:function(el,binding){
    console.log(el);
    console.log(binding)
    el.focus();
    },
    bind:function(el){
    console.log("只执行一次钩子函数")
    },
    update:function(el){
    console.log("更新")
    }

    })
    /* eslint-disable no-new */
    new Vue({
    el: '#app',
    data:{msg:"vue.root"},
    components: { App },
    template: '<App/>'
    })

    实例-----------------------------------------------------

    <template>
    <div id="app">
    <img src="./assets/logo.png">
    <input type="text" v-model="texts" v-focus>
    <!-- <HelloWorld/> -->
    <Parent />
    <!-- <Music/> -->
    <slotDemo>
    <!-- <div>hello插槽</div>
    <template slot="v1">
    <div class="v1">{{slotParentmsg}}</div>
    </template>
    <template slot="v2">
    <div class="v1">v2内容</div>
    </template> -->
    <div slot-scope="slotparents"><h2>{{slotparents.msgs}}</h2></div>
    </slotDemo>
    <animtes></animtes>
    </div>
    </template>

    <script>
    /* import HelloWorld from './components/HelloWorld' */
    import Parent from './components/parent'
    import Music from './components/music'
    import slotDemo from './components/slotDemo'
    import animtes from './components/animtes'
    export default {
    name: 'App',
    components: {
    Parent,
    Music,
    slotDemo,
    animtes
    },
    data(){
    return{
    slotParentmsg:"插槽的动态内容",
    texts:"text的内容"
    }
    },
    methods:{

    }
    }
    </script>

    <style>
    #app {
    font-family: 'Avenir', Helvetica, Arial, sans-serif;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    text-align: center;
    color: #2c3e50;
    margin-top: 60px;
    }
    </style>

  • 相关阅读:
    uu467 图片选择修改点
    vant coupon组件使用完整demo不坑人
    一个关于wait/notify与锁关系的探究
    一个简单字符串差异对比暴力算法实现
    基于long pull实现简易的消息中心MQ参考
    three.js(webgl) 课程
    仿照GifCam搞了一个开源的项目,c# wpf prism HandyControl
    fiddler学习——使用fiddler查看请求响应时间
    两小时一起快速搭建个人博客
    C# HttpClient 进度条
  • 原文地址:https://www.cnblogs.com/xiao-peng-ji/p/11332661.html
Copyright © 2020-2023  润新知