【问题标题】:Vuejs Input Binding Based on Computed Property基于计算属性的 Vuejs 输入绑定
【发布时间】:2018-05-27 03:18:18
【问题描述】:

我有一个场景,我希望输入字段的 v-model 绑定由计算属性返回的值决定。

请看下面的例子:

<!DOCTYPE html>
<html>
<head>
<script src="https://unpkg.com/vue@2.1.10/dist/vue.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />  
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
  <div id="app" class="container-fluid">
    <h2>Input Binding</h2>
    <p><b>First Name</b></p>
    <input type="text" v-model="value.first" placeholder="Enter first name" />
    <p style="margin-top:20px;"><b>Second Name</b></p>
    <input type="text" :v-model="lastName" placeholder="Enter last name" />
    <hr />
    <p>{{value.first}} {{value.second}}</p>
    <hr />
    <p>Value of computed property: {{lastName}}</p>
  </div>
  <script>  
   new Vue({
      el: '#app',
      data: function() {
        return {
          value: {
          first:'',
          second:''}
        }
      },
    computed: {
        // a computed getter
        lastName: function() {
            return 'value.second'
        } 
      }     
    });
  </script>
</body>
</html>

正如您在上面的代码中看到的,我希望第一个字段绑定到 value.first,所以我选择了 v-model="value.first"。对于第二个字段,我希望模型绑定由计算属性返回的值决定。现在这是一个简单的例子,只有一个返回值,即 value.second。但这将取决于逻辑。

现在,当我尝试进行该绑定时,它不会返回任何内容。非常感谢任何帮助。

【问题讨论】:

    标签: javascript vue.js vuejs2


    【解决方案1】:

    您可以按如下方式使用computed setter

    computed: {
        lastName: {
            get(){
                //perform your logic
                return 'value.second'
            },
            set(newValue){
                this.value.second = newValue;
            }
    
        } 
      }     
    

    现在在您的模板中将此计算属性用作v-model

    <input type="text" v-model="lastName" placeholder="Enter last name" />
    

    这里是fiddle

    【讨论】:

    • 哦,我想这就是他的意思。我很难理解它
    • 嗨 Vamsi,这就是我想要的。我认为它正在做它的工作。但是有个小麻烦。第二个输入字段继续显示填充的“value.second”。如果我快速键入一些内容,它确实会正确绑定到 value.second 数据属性。但随后它被 value.second 文本所取代。我该如何纠正这个问题?
    • @asanas 你能用逻辑重现一个小提琴吗?
    • @VamsiKrishna 非常感谢。它完美地工作。我出去了一段时间,因此无法重现小提琴。对此感到抱歉。
    • @VamsiKrishna 您的解决方案对我来说效果很好。但是现在我的情况更加复杂了,我又被卡住了。我在类似的行上发布了一个新问题。如果你能帮忙...stackoverflow.com/questions/47805993/…
    猜你喜欢
    • 2018-05-28
    • 2018-05-30
    • 2020-02-05
    • 2018-11-12
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 2022-06-23
    • 2017-08-23
    相关资源
    最近更新 更多