У меня есть директива Vue, добавленная в добавленный элемент html, такой как директива v-on, но она не работает на моем конце. В принципе, я хочу знать эквивалент .on() в jquery.
Как заставить директиву Vue js работать в добавленном html-элементе
Ответ 1
"Компиляция Vue.js происходит, когда вы создаете экземпляр/монтируете корневой экземпляр. Он не обнаруживает ввод нового DOM, если он не является результатом директивы (например, v-repeat, v-partial будет динамически создавать новые фрагменты DOM )". https://github.com/vuejs/Discussion/issues/77
Вам нужно скомпилировать новый добавленный элемент следующим образом:
HTML:
<div id="app">
<button v-on="click: addNewElement()">Add Element</button>
<br />
</div>
JavaScript
new Vue({
el: '#app',
data: {
sampleElement: '<button v-on="click: test()">Test</button>'
},
methods:{
addNewElement: function(){
var element = $('#app').append(this.sampleElement);
/* compile the new content so that vue can read it */
this.$compile(element.get(0));
},
test: function(){
alert('Test');
}
}
});
Смотрите этот рабочий Fiddle в Firefox: http://jsfiddle.net/chrislandeza/syewmx4e/
Обновление
$компиляция была удалена на Vue 2.x
Я видел людей, предлагающих Vue.compile или
var tmp = Vue.extend({
template: 'Content'
})
new tmp().$mount(' id or refs ')
Но те 2 не ведут себя как старый $compile.
Ответ 2
Для Vue 2.x новое решение упоминается здесь в документе: https://vuejs.org/v2/api/#vm-mount (см. "Пример" ).
Пользовательский пример:
var MyComponent = Vue.extend({
template: '<div v-on:click="world">Hello!</div>',
methods : {
world : function() {
console.log('world')
}
}
})
var component = new MyComponent().$mount()
document.getElementById('app').appendChild(component.$el)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.4/vue.min.js"></script>
<div id="app"></div>
Ответ 3
Вам нужно зарегистрировать html в качестве шаблона компонента.