1
일단 VueJS가로드되면 내 viewmodel에 이벤트 리스너를 추가하려고합니다. VueJS를 사용하지 않는다면 이벤트 리스너를 추가하면 코드가 맞지만 VueJS에는 절대 연결되지 않는다는 것을 알 수 있습니다.VueJS 2에 이벤트 리스너 추가
<div id="app">
<div name="pageContent" id="preview">
<section class="row">
<div class="columns medium-12">
<h1>This is the top content</h1>
<p>ashcbaubvdiuavduabd</p>
</div>
</section>
<section class="row">
<div class="columns medium-6">
<h1>This is left content</h1>
<p>ashcbaubvdiuavduabd</p>
</div>
<div class="columns medium-6">
<h1>This is the right content</h1>
<p>ashcbaubvdiuavduabd</p>
</div>
</section>
</div>
</div>
<script type="text/javascript">
let editorContainer = document.getElementById('preview');
let controls = document.getElementById('defaultControls');
let cmsEditor = new CmsEditor(editorContainer, controls);
var app = new Vue({
el: '#app',
data: {
editor: cmsEditor
},
mounted: function() {
// wire up our listeners
console.log('mounted')
document.oncontextmenu = function() { return false; };
let rows = this.editor.EditorContainer.getElementsByTagName("section");
for (var i = 0; i < rows.length; i++) {
console.log("section " + i + " : " + rows[i].innerHTML);
rows[i].addEventListener('mouseover', function() {
console.log('mouse over event');
this.editor.SetActiveRow(this);
});
rows[i].addEventListener('dblclick', function() {
this.editor.DisplayContextMenu(this);
});
}
},
methods: {
save: function() {
console.log('save');
this.editor.Save();
},
undo: function() {
console.log('undo');
this.editor.Undo();
}
}
});
</script>
이벤트는 DOM 이벤트는 다른 :
는 나는 이런 식으로 뭔가해야한다고 생각합니다. Vue 이벤트를 등록하지 않았습니다. 잘못된 'this'에 액세스했기 때문에 콜백이 작동하지 않습니다. – thanksd
가능한 [콜백 내부의 올바른 \'this \ '에 액세스하는 방법] (https://stackoverflow.com/questions/20279484/how-to-access-the-correct-this-inside-a-callback) – thanksd
ES6를 사용하는 경우 화살표 함수를 사용하여 어휘 'this'(즉, VueJS 인스턴스의 그것)가 바인딩됩니다. 그렇지 않으면 이벤트 리스너 외부로 캐시해야합니다 (예 : 'var self = this'를 사용하면 이벤트 리스너 내에서 Vue 인스턴스를 올바르게 참조 할 수 있습니다. 'self.editor.SetActiveRow (this)'. – Terry