Javascript 更改时从js调用vue函数
我正在尝试从一个on.(“change”)事件调用一个vue方法,这很好,但尝试将从更改事件接收到的数据提供给一个vue变量,控制台日志显示该变量有新数据,但它实际上并没有正确地更改变量,它在复制组件时更改了最后一个变量 以下是我的一些代码:Javascript 更改时从js调用vue函数,javascript,vue.js,ckeditor,components,Javascript,Vue.js,Ckeditor,Components,我正在尝试从一个on.(“change”)事件调用一个vue方法,这很好,但尝试将从更改事件接收到的数据提供给一个vue变量,控制台日志显示该变量有新数据,但它实际上并没有正确地更改变量,它在复制组件时更改了最后一个变量 以下是我的一些代码: Vue.component('text-ceditor',{ props:['id'], data: function (){ return { dataText: "this is something for example"
Vue.component('text-ceditor',{
props:['id'],
data: function (){
return {
dataText: "this is something for example"
}
},
template: '#text-ceditor',
methods: {
setData: function(data){
console.log(data)
this.dataText = data
console.log(this.dataText)
}
},
mounted: function(){
CKEDITOR.replace(this.$refs.text);
self = this;
CKEDITOR.instances.texteditor.on('change', function() {
self.setData(this.getData())
})
}
})
组件工作正常,但变量只是更改了最后一个
这里有一个问题:您的问题不在于
Vue
,而在于CKEDITOR
及其实例(在模板中定义的ID以及引用它们的方式)
第一个问题是您在
text-ceditor
组件中复制ID:
<textarea ref="text" v-model="dataText" id="texteditor" rows="10" cols="80"></textarea>
一旦我们解决了这个问题,让我们从组件中的
mounted
方法中引用正确的CKEDITOR
实例
我们希望引用与组件中的id匹配的组件。
发件人:
致:
请注意,我还删除了对setData
的调用,因为不需要它,并且还将self
声明为一个变量,以避免全局范围(这将每次覆盖它,并在所有不同组件中引用最新的一个)
现在所有的东西都在正确更新。你能准确地扩展你试图隔离的bug吗?当你尝试在第一个或任何组件中写入时,只有最后一个得到了更改,应该单独处理
<textarea ref="text" v-model="dataText" :id="id" rows="10" cols="80"></textarea>
mounted: function(){
CKEDITOR.replace(this.$refs.text);
self = this;
CKEDITOR.instances.texteditor.on('change', function() {
self.setData(this.getData())
})
}
mounted: function () {
CKEDITOR.replace(this.$refs.text);
var self = this;
var myCKEInstance = CKEDITOR.instances[self.id]
myCKEInstance.on('change', function () {
self.dataText = myCKEInstance.getData()
})
}