![](/img/trans.png)
[英]Adding to ace-editor wise autocomplete: List user-defined functions and variables (javascript language)
[英]Vue - Apply “v-model” on user-defined component which use ace-editor
CodeEditor.vue:
<template>
<div class="ace-container">
<div class="ace-editor" ref="ace"></div>
</div>
</template>
<script>
import ace from 'ace-builds'
import 'ace-builds/webpack-resolver'
import 'ace-builds/src-noconflict/theme-monokai'
import 'ace-builds/src-noconflict/mode-javascript'
export default {
mounted() {
this.aceEditor = ace.edit(this.$refs.ace, {
maxLines: 60,
minLines: 10,
fontSize: 14,
theme: this.themePath,
mode: this.modePath,
tabSize: 4
})
},
data() {
return {
aceEditor: null,
themePath: 'ace/theme/monokai',
modePath: 'ace/mode/javascript'
}
},
methods: {
setCode(code) {
this.aceEditor.setValue(code);
},
getCode() {
return this.aceEditor.getValue();
},
}
}
</script>
<style>
.ace-editor {
width: 600px;
height: 600px;
}
</style>
QuizExecution.vue :( 部分)
<template>
<v-app height="100%">
<div id="qz-wrapper">
<!--
<v-textarea id="programmingText" v-model="answerData[question.id]"
@change="saveAnswer(qe.id, question.id)" label="Code" outlined></v-textarea>
-->
<CodeEditor id="programmingText" v-model="answerData[question.id]"
@change="saveAnswer(qe.id, question.id)"></CodeEditor>
</div>
</v-app>
</template>
<script>
import Vue from 'vue'
import CodeEditor from "./CodeEditor";
export default {
components: {CodeEditor},
data() {
return {
// ..
}
}
}
</script>
<style scoped>
</style>
使用vuetify
的<v-textarea>
,我可以使用v-model
将其内容动态双向绑定到data属性,以便可以在加载时初始化,并使用@change
属性保存更改。
然后,我想用ace-editor
替换输入区域,它支持语法高亮等功能。
所以,我已经定义了组件在CodeEditor.vue
,然后导入及在使用它QuizExecution.vue
。
但是, v-model
和@change
在<CodeEditor>
标记上<CodeEditor>
。
@click
应用v-model
并在此<CodeEditor>
上QuizExecution.vue
。 您可以使用道具并通过@update_question_id观看更改事件;
<CodeEditor id="programmingText" :question_id="answerData[question.id]"
@update_question_id="answerData[question.id]=@event"
></CodeEditor>
....
watch:{
answerData(){
saveAnswer(this.qe.id, this.question.id)
}
}
CodeEditor.vue:您可以使用props获得question_id值。 我认为它将是字符串或数字。 还要观看question_id,然后使用$ emit将更改$ event发送到主组件。
export default {
props:{
question_id: [String,Number]
},
watch:{
question_id(val){
this.$emit("update_question_id",val)
}
}
.....
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.