programing

Vue Uncaught TypeError: fn.bind가 함수가 아닙니다.

copysource 2022. 8. 10. 00:02
반응형

Vue Uncaught TypeError: fn.bind가 함수가 아닙니다.

내 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에 다음 코드가 있습니다.표시하다

<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;
  }
},

제가 뭘 잘못하고 있는지 알아낼 수 있게 도와주세요.

메서드 블록은 javascript 함수만 포함해야 합니다.메서드 블록 내에 메서드가 포함된 중첩된 개체가 있을 때도 이 오류가 발생했습니다.

예:

methods: {
  namespace: {
    methodName () {
    }
  }
}

다음 형식으로 포맷해야 합니다.

methods: {
  namespace-methodName () {
  }
}

아래 코드를 추가해서 시도해 주세요.

<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>

실수로 컴퓨터를 메서드에 중첩했습니다.

vue 네임스페이스 버그 및 솔루션

vue 및 vue 컴포넌트를 이러한 방법으로 사용하는 것은 권장하지 않습니다.

이벤트 바인드 버그 클릭

여기에 이미지 설명 입력

솔루션(글로벌)this네임스페이스 버그)

vue 인스턴스를 반환하기만 하면 모든 것이 정상입니다.

여기에 이미지 설명 입력

상세 정보

https://github.com/xgqfrms/vue/issues/49

언급URL : https://stackoverflow.com/questions/49950029/vue-uncaught-typeerror-fn-bind-is-not-a-function

반응형