javascript - Vuejs - 将计算属性分配给数据()

标签 javascript vue.js

我有一个输入字段,我想根据条件将其留空或填充

  • 条件 A:新生,空白字段
  • 条件 B:现有学生,填充字段

此数据来自 data() 函数或 computed: 属性。例如:

data () {
  return {
    studentName: '', // empty student name property (/new student route)
    studentPersonality: ''
  }
},
computed: {
  ...mapGetters({
    getStudent // existing student object (/edit student route)
  })
}

如果我们来自 /new 学生路线,我的输入字段应该是空白的,或者如果我们来自 /edit 路线。

我可以通过将 getStudent.name 分配给 v-model 来填充输入字段,如下所示。

<input type="text" v-model="getStudent.name">

...当然可以通过将 studentName 分配给 v-model

来清除该字段
<input ... v-model="studentName">

挑战:我如何使用 getStudent.name 如果它存在,但返回空白 studentName data() 属性如果 getStudent.name 不存在?我试过:

<input ... v-model="getStudent.name || studentName">

...这似乎有效,但显然无效并导致控制台错误

'v-model' directives require the attribute value which is valid as LHS

我做错了什么?

最佳答案

确实没有必要让 input 字段注册到 vue 组件中的不同属性。

如果您想要一个可设置的计算属性,您可以使用 set & get 方法定义它。

computed: {
  student_name: {
    get: function() {
      return this.$store.getters.get_student.name
    },
    set: function(val) {
      this.$store.commit('set_student_name');
    }
  }
}

另一种方法是在 input 元素 本身中将值与输入更改处理程序分开,在这种情况下,您将使用已设置的 getter

<input type="text" :value="getStudent.name" @input="update_name($event.target.value)">


最后,如果你真的需要使用两个不同的属性,你可以在 created/activated Hook 上设置它们(并回答你原来的问题):

created: function() {
  this.studentName = this.getStudent
},
activated: function() {
  this.studentName = this.getStudent
}

虽然你总是需要将更新委托(delegate)给商店,所以我要么使用 get/set 计算属性,要么使用值/更新分离

关于javascript - Vuejs - 将计算属性分配给数据(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48784139/

相关文章:

javascript - get 对此未定义。vuejs 的 $cookie.get

vue.js - 找不到模块 'vuetify-loader/lib/plugin'

vue.js - 使用vuejs动态创建模型时如何从DOM控件获取值

javascript - 如何定期更新 VueJS 中的组件

javascript - 自定义 Highcharts 上下文菜单按钮出现在页面上的每个图表中

javascript - 用php创建动态图像

javascript - 防止 contenteditable 自动聚焦在 Chrome 上的 Enter 按键上

javascript - 如何避免VueJS删除DOM中的props属性?

javascript - jQuery:将文件类型类添加到任何文件类型的链接

javascript - mootools 1.4.2 和 angular 1.3 在 ie8 中一起玩得很好