vue.js - 如何修复 Vue 3 模板编译错误 : v-model value must be a valid JavaScript member expression?

标签 vue.js vue-component vuejs3

我在做一个vue项目,vue版本是3.0 最近由于某种原因我可以看到这么多警告。

模板编译错误:v-model 值必须是有效的 JavaScript 成员表达式

我想这是因为我使用了像这样的长 v-model 变量名。

<textarea v-model="firstVariable.subVariable.subVariableKey" readonly></textarea>

如果有任何想法,请告诉我。

提前致谢

这是组件和模板代码。

var myTemplate = Vue.defineComponent({
    template: '#myTemplate',
    
    data() {
        return {
          firstVariable: {}
        }
    },
    
    mounted() {
        loadData();
    },
    
    methods:{
      loadData() {
          axios.get(MY_ROUTES).then(res => {
              // let's suppose res.data is going to be {subVariable: {subVariableKey: "val"}} 
              this.firstVariable = res.data;        
              
          })
      }
    }
    
});

// template.html

<script type="text/template" id="myTemplate">
    <div class="container">
      <textarea v-model="firstVariable.subVariable?.subVariableKey"></textarea>
    </div>
</script>

最佳答案

为了让您的属性(property)成为响应式(Reactive)的,您必须定义其完整架构:

  data() {
    return {
      firstVariable: {
        subVariable: {
          subVariableKey: ''
        }
      }
    }
  },

并直接使用它而无需可选链接

v-model="firstVariable.subVariable.subVariableKey" 因为 v-model="firstVariable.subVariable?.subVariableKey" 格式错误的表达式像这样的 v-model="a+b" test

例子

var comp1 = Vue.defineComponent({
  name: 'comp1',
  template: '#myTemplate',

  data() {
    return {
      firstVariable: {
        subVariable: {
          subVariableKey: ''
        }
      }
    }
  },

  mounted() {
    this.loadData();
  },

  methods: {
    loadData() {

    }
  }

});

const {
  createApp
} = Vue;
const App = {
  
  components: {
    comp1
  },
  data() {
    return {

    }
  },
  mounted() {
    
  }
}
const app = createApp(App)
app.mount('#app')
<script src="https://unpkg.com/vue@3.0.0-rc.11/dist/vue.global.prod.js"></script>

<div id="app" >
  vue 3 app
  <comp1 />
</div>
<script type="text/template" id="myTemplate">
  <div class="container">
    <textarea v-model="firstVariable.subVariable.subVariableKey"></textarea>
    <div>
      {{firstVariable.subVariable.subVariableKey}}
    </div>
  </div>
</script>

关于vue.js - 如何修复 Vue 3 模板编译错误 : v-model value must be a valid JavaScript member expression?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68167044/

相关文章:

vue.js - 使用现有 HTML 中的数据加载 Vue View 模型

vue.js - 是否可以全局绑定(bind)到更改事件?

typescript - 类型 'Ref<never[]>[]' 上不存在属性

vue.js - 为什么 react 变量在未分配给 v-model 时会发生变化

javascript - 在 Vue App 上使用 FieldValue 增加 Firestore 的值(value)

javascript - 在加载时无需事件即可将数据从子级传递到父级,这在 vue 世界中可能吗?

vue.js - 如何仅在某些页面上显示验证码图标(VUE reCAPTCHA-v3)?

javascript - 将动态 bool 属性传递给 VueJS 组件

javascript - Vueify 上的 Vuejs 递归组件

javascript - 如何在 VueJS 3 中使用 9.0.1 Firebase 方法