2017-07-30 99 views
3

我試圖用vue js創建一個使用laravel混合的全局組件,但是當訪問屬性this.$el時,它未定義。這是我的組件文件:

Datepicker.vue

<template> 
<input 
    type="text" 
    :name="name" 
    :class="myclass" 
    :placeholder="placeholder" 
    :value="value" /> 
</template> 

<script> 
export default { 
    props: ['myclass','name','placeholder','value'], 
    data() { 
    return { 

    } 
    }, 
    created() { 
    console.log("this.$el", this.$el); //undefined 
    console.log("this", this); //$el is defined 
    var vm = this; 
    var options = { 
     "locale": "es",   
     "onChange": function(selectedDates, dateStr, instance) { 
      vm.$emit('input', dateStr); 
     } 
     }; 

    $(this.$el) 
     // init 
     .flatpickr(options);  
    }, 
    destroyed(){ 
    console.log("destroyed"); 
    } 
} 
</script> 

Console

但是,當組件作爲X-模板它的工作原理創建:

client.js

Vue.component('date-picker', { 
    props: ['myclass','name','placeholder','value'], 
    template: '#datepicker-template', 
    mounted: function() { 
    var vm = this; 
    var options = { 
     "locale": "es",   
     "onChange": function(selectedDates, dateStr, instance) { 
      vm.$emit('input', dateStr); 
     } 
     }; 

    $(this.$el) 
     // init 
     .flatpickr(options);  
    }, 
    destroyed: function() { 
    console.log("destroyed"); 
    } 
}); 

create.blade.php

<script type="text/x-template" id="datepicker-template"> 
    <input 
    type="text" 
    :name="name" 
    :class="myclass" 
    :placeholder="placeholder" /> 
</script> 

回答

2

$el直到mounted才存在。

mounted() { 
    var vm = this; 
    var options = { 
     "locale": "es",   
     "onChange": function(selectedDates, dateStr, instance) { 
      vm.$emit('input', dateStr); 
     } 
    }; 

    $(this.$el) 
    // init 
    .flatpickr(options);  
}, 

查看文檔中的lifecycle diagram

+0

但是,它使用X模板創建組件時,$ el存在直到安裝。 – ivanjj22

+0

@ ivanjj22不,在您的X-Template示例中,您正在使用'mounted'。 – Bert