Vue Uncaught TypeError:fn.bind 不是函数
Posted
技术标签:
【中文标题】Vue Uncaught TypeError:fn.bind 不是函数【英文标题】:Vue Uncaught TypeError: fn.bind is not a function 【发布时间】:2018-10-01 15:59:16 【问题描述】:我的 App.vue 如下所示
<template>
<div id="app">
<home-central></home-central>
</div>
</template>
<script>
import HomeCentral from './components/HomeCentral';
export default
name: 'App',
components:
HomeCentral,
,
;
</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>
我在 src/components/HomeCentral.vue 中有以下代码
<template>
<div class="homecentral">
<input type="text" v-model="title"><br/>
<h1>title</h1>
<p v-if="showName">user.first_name</p>
<p v-else>Nobody</p>
<ul>
<li v-for="item in items" :key="item.id">item.title</li>it
</ul>
<button v-on:click="greet('Hello World')">Say Greeting</button>
<br/>
<input type="text" v-on:keyup="pressKey" v-on:keyup.enter="enterHit">
<label>First Name: </label><input type="text" v-model="user.firstName">
<br/>
<label>Last Name: </label><input type="text" v-model="user.lastName">
<h3></h3>
</div>
</template>
<script>
export default
name: 'HomeCentral',
data()
return
title: 'Welcome',
user:
firstName: 'John',
lastName: 'Doe',
,
showName: true,
items: [
title: 'Item One' ,
title: 'Item Two' ,
title: 'Item Three' ,
],
;
,
methods:
greet: function (greeting)
alert(greeting);
,
pressKey: function (e)
console.log('pressed' + e.target.value);
,
enterHit()
console.log('You hit enter');
,
computed:
fullName: function()
return this.user.firstName + ' ' + this.user.lastName;
,
,
;
</script>
<style scoped>
</style>
这会引发以下错误:
vue.runtime.esm.js?ff9b:205 Uncaught TypeError: fn.bind is not a function
at nativeBind (vue.runtime.esm.js?ff9b:205)
at initMethods (vue.runtime.esm.js?ff9b:3537)
at initState (vue.runtime.esm.js?ff9b:3305)
at VueComponent.Vue._init (vue.runtime.esm.js?ff9b:4624)
at new VueComponent (vue.runtime.esm.js?ff9b:4794)
at createComponentInstanceForVnode (vue.runtime.esm.js?ff9b:4306)
at init (vue.runtime.esm.js?ff9b:4127)
at createComponent (vue.runtime.esm.js?ff9b:5604)
at createElm (vue.runtime.esm.js?ff9b:5551)
at createChildren (vue.runtime.esm.js?ff9b:5678)
如果我删除计算块,事情就会开始正常工作:
computed:
fullName: function()
return this.user.firstName + ' ' + this.user.lastName;
,
请帮我弄清楚我做错了什么。
【问题讨论】:
您的问题是由拼写错误引起的,您不小心将计算机嵌套在方法中,而不是在同一级别上,并且.bind
不存在于 javascript 对象上,请参阅 Computed Properties and Watchers 那不是方法是必需的
Ferrybig 是正确的,移动“计算”不是一种方法,它会在您的对象上设置计算属性。将计算移出方法。
【参考方案1】:
方法块应该只包含 javascript 函数。 当我在方法块中有一个带有方法的嵌套对象时,我也遇到了这个错误。
即:
methods:
namespace:
methodName ()
应该格式化为
methods:
namespace-methodName ()
【讨论】:
【参考方案2】:能否请您添加以下代码并尝试,
<template>
<div class="homecentral">
<input type="text" v-model="title"><br/>
<h1>title</h1>
<p v-if="showName">user.first_name</p>
<p v-else>Nobody</p>
<ul>
<li v-for="item in items" :key="item.id">item.title</li>it
</ul>
<button v-on:click="greet('Hello World')">Say Greeting</button>
<br/>
<input type="text" v-on:keyup="pressKey" v-on:keyup.enter="enterHit">
<label>First Name: </label><input type="text" v-model="user.firstName">
<br/>
<label>Last Name: </label><input type="text" v-model="user.lastName">
<h3></h3>
</div>
<script>
export default
name: 'HomeCentral',
data()
return
title: 'Welcome',
user:
firstName: 'John',
lastName: 'Doe',
,
showName: true,
items: [
title: 'Item One' ,
title: 'Item Two' ,
title: 'Item Three' ,
],
;
,
methods:
greet: function (greeting)
alert(greeting);
,
pressKey: function (e)
console.log('pressed' + e.target.value);
,
enterHit()
console.log('You hit enter');
,
computed:
fullName: function()
return this.user.firstName + ' ' + this.user.lastName;
,
;
</script>
<style scoped>
</style>
您不小心将计算机嵌套在方法中。
【讨论】:
【参考方案3】:vue 命名空间错误和解决方案
我永远不会推荐以这种方式使用 vue 和 vue 组件
点击事件绑定错误
解决方案(全局this
命名空间错误)
只要返回一个vue的实例,现在一切都OK了。
更多细节
https://github.com/xgqfrms/vue/issues/49
【讨论】:
以上是关于Vue Uncaught TypeError:fn.bind 不是函数的主要内容,如果未能解决你的问题,请参考以下文章
如何解决“Uncaught (in promise) TypeError: response.body.forEach is not a function”? (vue.js 2)
vue控制台报 Uncaught (in promise) TypeError:
Uncaught TypeError: $props.currentQuestion is undefined Vue
解决vue3 vue-pdf报错Uncaught (in promise) TypeError: h is not a function
解决vue3 vue-pdf报错Uncaught (in promise) TypeError: h is not a function
解决vue3 vue-pdf报错Uncaught (in promise) TypeError: h is not a function