面试题答案
一键面试- 数据传输格式:
- 可以选择JSON格式。Kotlin/JS能够很方便地将复杂数据结构转换为JSON字符串。例如,假设有一个包含多个嵌套对象和列表的Kotlin数据类:
data class InnerData(val value: String) data class OuterData(val innerList: List<InnerData>, val name: String) val outer = OuterData(listOf(InnerData("data1")), "outerName") val jsonString = Json.encodeToString(outer)
- 在Vue端,通过
JSON.parse
方法可以将接收到的JSON字符串解析为JavaScript对象进行展示。
- 从Kotlin/JS传递数据到Vue:
- 在Kotlin/JS中,可以通过定义一个函数,将数据以JSON字符串形式传递给Vue。比如,在Kotlin/JS模块中定义:
@JsExport fun sendDataToVue(data: String) { // 这里假设通过某种方式将数据传递给Vue,比如通过全局变量或者Vue的props传递 }
- 在Vue组件中,通过props接收传递过来的数据:
<template> <div> <!-- 展示数据 --> </div> </template> <script> export default { props: { dataFromKotlin: { type: String, required: true } }, data() { return { parsedData: JSON.parse(this.dataFromKotlin) }; } }; </script>
- 事件监听机制(Vue修改数据反馈回Kotlin/JS):
- 在Vue组件中,当数据发生变化时,通过
$emit
触发一个自定义事件。例如,假设在Vue组件中有一个输入框修改了数据:
<template> <div> <input v-model="parsedData.innerList[0].value" @input="sendDataBack"> </div> </template> <script> export default { //...props和data定义 methods: { sendDataBack() { const updatedJson = JSON.stringify(this.parsedData); this.$emit('data-updated', updatedJson); } } }; </script>
- 在Kotlin/JS端,需要监听这个自定义事件。可以通过Kotlin/JS的互操作性,在绑定Vue组件时,监听该事件。例如:
@JsModule("vue") external val Vue: dynamic fun main() { val vueComponent = Vue.extend<dynamic>(js("{}")) val vm = vueComponent().$mount() vm.$on("data - updated", { updatedData: String -> // 对更新后的数据进行进一步处理 val jsonObject = Json.decodeFromString<OuterData>(updatedData) // 执行后续逻辑 }) }
- 在Vue组件中,当数据发生变化时,通过
这样就完成了Kotlin/JS与Vue之间复杂数据结构的双向交互流程。