Vue.js vue如何在v型上使用getter setter?
{{msg}} 甲级{ } A.A=1 新Vue({ el:“#应用程序”, 数据:{ }, 计算:{ 味精:{ cache:false, 设置:功能(val){ A.A=val }, get:function(){ 返回A.A } } } })Vue.js vue如何在v型上使用getter setter?,vue.js,vuejs2,Vue.js,Vuejs2,{{msg}} 甲级{ } A.A=1 新Vue({ el:“#应用程序”, 数据:{ }, 计算:{ 味精:{ cache:false, 设置:功能(val){ A.A=val }, get:function(){ 返回A.A } } } }) vue如何在v型上使用getter setter?我试着在v-model上使用getter和setter,但都不起作用 首先,您的输入必须位于#app元素中。Vue实例当前甚至没有监视您的 <div id="app"> <in
vue如何在v型上使用getter setter?我试着在v-model上使用getter和setter,但都不起作用 首先,您的
输入必须位于#app
元素中。Vue实例当前甚至没有监视您的
<div id="app">
<input v-model="msg"/>
<p>{{ msg }}</p>
</div>
<script>
class A{
}
A.a = 1
new Vue({
el: '#app',
data: {
},
computed: {
msg: {
cache: false,
set: function(val){
A.a = val
},
get: function(){
return A.a
}
}
}
})
</script>
对于这样的Vue实例,它将起作用:
class A {
constructor(a) { this.a = a}
}
let myA = new A(0)
但是,我会将类实例化移动到数据:
new Vue({
el: '#app',
data: {
a: myA.a = 1
},
computed: {
msg: {
set: function(val) {
this.a = val
},
get: function() {
return this.a
}
}
}
})
如果将a
保留在数据之外,则setter将工作并更新值,但getter不会工作,因为没有观察到Vue实例之外的变量。在Vue中实现模型的代码很简单,如下所示:
data() {
return {
a: new A(1).a
}
},
而html格式如下:
var v1 = new Vue({
el:'#vue1',
data:{
msg:'demo'
}
});
{{msg}}
第一个问题是范围。由于在Vue实例中,您提供的元素id为#app
,因此所有与Vue相关的标记都应位于id为app
的元素内,在您的情况下,则为div
其次,在保存数据的方式上,一旦使用v-model
指令,它将直接观察模型中的更改,并相应地对dom进行更改。您不需要getter和setter方法
最后,关于A类的代码是什么??
请查看javascript手册,因为详细解释这部分内容远远超出了本问题的范围。
你的能手和二传手都很好。(在本例中,它们不是绝对必要的,因为它们没有做任何事情来修改用户输入,但我假设为了您的问题,这是一种简化。)
您的代码有两个不同的问题:
输入字段位于Vue根节点之外,因此框架无法看到它。[您在对问题的后期编辑中更正了此问题。]
您在Vue之外定义数据(A.A
),因此框架不知道如何监视它的更改李>
要使框架对更改作出反应,必须将变量A
放入组件的数据块中(如果确实需要外部变量,请使用setter函数将更新后的值复制到其中)
newvue({
el:“#应用程序”,
数据:{
A:{A:1}//
var v1 = new Vue({
el:'#vue1',
data:{
msg:'demo'
}
});
<div id='vue1'>
<input type='text' v-model='msg' />
<p>
{{msg}}
</p>
</div>