vue.js - Vue.js 2:如何绑定到组件方法?
问题描述
我有一个带有私有对象数组的 VueJS (v2) 组件this.private.messagesReceived
,我希望将其显示在文本区域中。该数组应通过方法/函数转换为字符串,并且 Vue 阻止了我所有的绑定尝试。每次尝试都会导致我的序列化函数(将数组转换为字符串)仅被调用一次,并且在数据更改时不再被调用。
我觉得必须有一种方法可以在没有Vue.set()
forceUpdate 恶作剧的情况下做到这一点。
https://jsfiddle.net/hdme34ca/
尝试 1:计算方法
在这里,我们遇到了 Vue 只调用我的计算方法messagesReceived1
一次并且再也不会调用的问题。
<script>
{
computed: {
messagesReceived1() {
console.log("This is called once and never again even when new messages arrive");
return this.private.messagesReceived.join("\n");
},
...
methods: {
addMessage(m) {
console.log("This is called multiple times, adding messages successfully");
this.private.messagesReceived.push(m);
}
}
<script>
<template>
<textarea rows="10" cols="40" v-model="messagesReceived1"></textarea>
</template
尝试 2:绑定方法
在这里,Vue 决定它不喜欢 textarea 中的胡须{{ messagesReceived2() }}
并且拒绝。它也不允许messagesReceived2()
或messagesReceived2
在v-model
.
<script>
{
methods: {
messagesReceived2() {
return this.private.messagesReceived.join("\n");
},
addMessage(m) {
console.log("This is called multiple times, adding messages successfully");
this.private.messagesReceived.push(m);
}
}
</script>
<template>
<textarea rows="10" cols="40">{{ messagesReceived2() }}</textarea><!--Nope-->
<textarea rows="10" cols="40" v-model="messagesReceived2()"></textarea><!--Nope-->
<textarea rows="10" cols="40" v-model="messagesReceived2"></textarea><!--Nope-->
</template
解决方案
您可以定义数据变量并在函数中设置其值。然后用textarea绑定变量,而不是直接用函数。
推荐阅读
- java - 使用 MappedByteBuffer 进行快速非阻塞读/写?
- ruby-on-rails - 如何在 Rails 中使用 Grape 包含关系
- dns - 使用谷歌域设置子域
- python - 如何使用numpy计算高维重叠积分
- java - Gradle 依赖 NoSuchMethodError 'AnnotationAttributes.getAliasedStringArray'
- sql - 我如何知道 SQL 数据库在一段时间内发生了什么变化?
- c# - 方法名称后括号中的参数:它们是什么,它们有什么作用?
- google-cloud-storage - RMAN 备份到 Google Cloud Storage
- python - 如何在网格布局之外(顶部)添加文本(QLabel)?
- apache-spark - 将 Spark DataFrame 保存到按日期分区的 Parquet