2017-02-07 8 views
0

Я относительно новичок в VueJS, и мне интересно, как встраивать/ссылаться на свойства компонента внутри других, так что привязка v-model фактически обновит их правильно.Вложенная модель данных VueJS

Чтобы проиллюстрировать, я пытаюсь сделать что-то подобное.

Шаблон:

<table> 
    <tr v-for="field in myFields"> 
     <td class="label">{{field.label}}</td> 
     <td class="user-control"> 
      <input v-model="field.model"> 
     </td> 
    </tr> 
</table> 

Компонент:

export default { 
    data() { 
     return { 
      myFields: [ 
       { 
        "label": "label", 
        "model": this.propertyOne 
       }, 
       { 
        "label": "label", 
        "model": this.propertyTwo 
       } 
      ], 
      propertyOne: "", 
      propertyTwo: "" 
     } 
    } 
} 

В этом примере я ожидаю шаблон для отображения значений propertyOne и propertyTwo (например, пустая строка) на входах в первом, и затем обновляйте эти значения, когда я их изменяю с помощью ввода, как это обычно делается с v-моделью.

Первые работы, что означает, что если я установил свойствоOne в значение «Foo», он сначала будет использоваться в качестве входного значения, но последующие изменения по-прежнему не обновляют свойства. Мне бы очень хотелось, чтобы это работало, чтобы я мог использовать силу v-for hook вместо того, чтобы записывать массивный статический шаблон, если у меня больше 10 полей.

ответ

0

Когда вы это сделаете: "model": this.propertyTwo это не гарантирует, что все последующие изменения на propertyTwo будут отражены в model. Для этого есть несколько вариантов.

Вы можете использовать watcher, поэтому всякий раз, когда propertyTwo изменится вы можете выполнить фрагмент кода, как следующее:

watch: { 
    // whenever propertyTwo changes, this function will run 
    propertyTwo: function (newProp) { 
    this.myFields[1].model = newProp 
    } 
}, 

Вы также можете использовать Computed-Properties или method, который будет реактивным, если любые связанные с изменением данных, они будут выполняться.

+0

Спасибо за ответ. Проблема, с которой я столкнулась, заключается именно в этом: поскольку свойствоTwo привязано к вводу, используя директиву v-model через свойство «model» объекта, изменения, внесенные во входное значение, не запускают наблюдателя на propertyTwo. Я еще не пробовал с вычисленными свойствами, так как я уверен, что они являются однонаправленными, так что это тоже не решит проблему, но, возможно, я ошибаюсь. –

+0

@BrendanB. если вы используете 'propertyTwo' с v-model, он должен запускать наблюдателей, вы можете добавить этот код или создать скрипку? – Saurabh

+0

вы можете видеть, чего я пытаюсь достичь в начальном посте. Я хочу использовать 'field.model' в директиве v-model вместо' propertyTwo', чтобы я мог использовать директиву v-for для циклического преобразования данных. Если бы я использовал 'propertyTwo' в шаблоне, то v-for был бы бесполезным, поскольку мне нужно было бы вручную объявить привязки свойств в шаблоне, не так ли? –