演示:https://codesandbox.io/s/23959y5wnp
所以我传递了一个函数,并且希望重新绑定this,所以我在函数上使用了.bind(this),但是返回的数据仍然是基于原始组件的。我遗漏了什么?
期望:Test2应该按一下按钮打印出Test2
代码:
App.vue
<template>
<div id="app">
<img width="25%" src="./assets/logo.png" /><br />
<Test1 :aFunction="passThis" /> <Test2 :aFunction="dontPassThis" />
</div>
</template>
<script>
import Test1 from "./components/Test1";
import Test2 from "./components/Test2";
export default {
name: "App",
components: {
Test1,
Test2
},
data() {
return {
value: "original"
};
},
methods: {
dontPassThis($_) {
console.log(this.value);
},
passThis($_) {
console.log($_.value);
}
}
};
</script>
<style>
#app {
font-family: "Avenir", Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>Test1.vue
<template>
<div>Test1 <button @click="() => aFunction(this)">click me</button></div>
</template>
<script>
export default {
data() {
return {
value: "Test1"
};
},
mounted() {
this.aFunction(this);
},
props: {
aFunction: {
required: true,
type: Function
}
}
};
</script>Test2.vue
<template>
<div>
Test2
<button @click="testFunction">click me</button>
</div>
</template>
<script>
export default {
data() {
return {
testFunction: null,
value: "Test2"
};
},
created() {
this.testFunction = this.aFunction.bind(this);
},
props: {
aFunction: {
required: true,
type: Function
}
}
};
</script>发布于 2019-02-25 07:39:18
在初始化时Vue已经是绑定组件的方法,函数的绑定不能超过一次。 (后续绑定没有影响)。
因此,当App初始化时,Vue将App实例绑定为其dontPassThis方法的上下文。App通过一个道具将dontPassThis“传递”给Test2,Test2随后试图绑定它,实际上它什么也不做。
https://stackoverflow.com/questions/54854606
复制相似问题