计算属性的问题
来源:5-2 计算属性 VS 侦听属性(2)
我要学习去了
2021-11-18
黄老师,今天我自己写了一个demo,发现在computed里面写了get和set,我想通过set触发一个input事件,然后在父组件监听它,之后拿监听到的值在父组件进行赋值,赋值之后把该值放到子组件的slot插槽里面,发现这种操作,input框不能输入,但是如果不把该值放到子组件的slot中,而是平级放就没啥问题,不知道原因,麻烦帮忙看看,代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<test @input="test">
<!--这样写不行,输入框输入不了指-->
<span>{{message}}</span>
</test>
<!--但是这样就可以-->
<!--<span>{{message}}</span>-->
</div>
<script>
Vue.component("test", {
data: function () {
return {
count: 0,
};
},
template: `
<div>
<input type="text" v-model="str" />
<slot></slot>
</div>
`,
computed: {
str: {
get() {
return "1";
},
set(val) {
this.$emit("input", val);
},
},
},
});
const app = new Vue({
el: "#app",
data() {
return {
message: "hello world",
};
},
methods: {
test(val) {
this.message = val;
},
},
components: {},
});
</script>
</body>
</html>写回答
1回答
-
ustbhuangyi
2021-11-21
你这样写显然有问题啊,str 的 getter 永远是 1,你的 input 绑定的 v-model 是 str,那不就永远是 1 了吗
032021-11-22
相似问题