2017-03-06 81 views
1

訪問模型在VueJS我設置基於用戶操作的模型數據。我想從一個方法訪問模型來更新一個元素。VueJS從方法

在下面的代碼中,當用戶更改第一個選擇列表時,我想更新第二個選擇列表以顯示第一個列表的id屬性。由於它是上層列表工作正常,但上層列表ID屬性沒有更新上層列表更改:

<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.2.1/vue.js"></script> 
</head> 
<body> 
     <div id="editor"> 
      <form id="query" methods="GET"> 
      <div id="form_container" class="row"> 
         <div class="form-group"> 
          <label for="choice-selector">Choices</label> 
          <select class="form-control" id="choice-selector" v-model="choice_id" v-on:change="refreshOptions"> 
           <option v-for="item in choices" v-bind:value="item.id"> 
           {{ item.name }} 
           </option> 
          </select> 
          <span>Current choice id: {{ choice_id }}</span> 
          <br> 
          <label for="option-selector">Options</label> 
          <select class="form-control" id="option-selector" v-model="option_id" > 
           <option v-for="item in options" v-bind:value="item.id"> 
            {{ item.name }} 
           </option> 
          </select> 
          <span>Current option id: {{ option_id }}</span> 
         </div> 
      </div> 
     </div> 

    <script> 
    let index = 0; 
    new Vue({ 
     el: '#editor', 
     data: { 
      choice_id: '1', 
      choices: [ 
       { id: '1', name: 'Choice A' }, 
       { id: '2', name: 'Choice B' }, 
       { id: '3', name: 'Choice C' } 
      ], 
      option_id: '1', 
      options: [ 
      ] 
      }, 
     ready: function startFetch() { 
      this.refreshOptions(); 
     }, 
     methods: { 
      refreshOptions: function refreshOptionList() { 
      console.log(">>refreshOptionList() index:" + index); 
      const vm = this; 
      const newOptions = [{ id: index, name: 'Option based on choices list id: ' + vm.choice_id }]; 
      vm.$set('options', newOptions); 
      index += 1; 
      } 
     }, 
     }); 
    </script> 
</body> 
</html> 

任何想法?

+0

你無法訪問'vm.options'嗎?你能創造一個小提琴嗎? – Saurabh

+1

@Saurabh我已經將代碼更改爲嵌入在html中的vue,以便將代碼粘貼到HTML頁面並在瀏覽器中打開。我不能從refreshOptions方法訪問選擇列表id屬性或choice_id屬性。 –

回答

1

在Vue公司2.X vm.$setVue.set一個別名,它需要3個參數:targetkeyvalue所以你應該使用這樣的:

vm.$set(this, 'options', newOptions); 

或者你可以分配給newOptionsthis.options

this.options = newOptions; 

工作例如:https://plnkr.co/edit/lFDm7wxb56h81EAwuUNc