2017-08-02 37 views
2

我想在我的Vue組件中的v-for內運行一個方法。 例如:Vue.js v-for的使用方法

<div v-for="(foo,index) in bar"> 
     <p>{{myMethod(foo,index)}}</p> 
</div> 

當我這樣做時,p標籤只是保持空白。這裏是我的方法(與愛可信調用):

myMethod:function(foo,index) { 
    axios.get('/myAjaxCall') 
    .then((response)=> { 
     //works perfectly 
     alert(response.data); 
     return response.data; 

    }) 
    .catch(function (error) { 
     console.error(error); 
    }); 
    }, 
} 

當我alert(SomethingWithFooAndIndex),瀏覽器顯示正是我需要的。當我刪除axios調用該方法似乎工作

謝謝!

+0

你錯過了關於屬性btw的結束報價 –

+0

這只是一個簡化的例子,我在ajax url –

回答

0

您的代碼存在問題。你錯過了報價 <div v-for="(foo,index) in bar"> <p>{{myMethod(foo,index)}}</p> </div>

請參考以下jsbin http://jsbin.com/wovavut/edit?html,js,output

+0

中使用它們這不是錯誤。我會更新問題 –

+0

您仍然可以參考jsbin –

+0

感謝您,我發現axios正在導致問題。 Chekc我編輯的問題請 –

0

我不認爲你應該在v-for

axios使用myMethod是異步

嘗試其他方法來執行myMethodbar,得到一個數據newbar,你可以渲染的newbar

<div v-for="(foo, index) in dataBar"> <p>{{otherSimpleMethod(foo, index)}}</p> </div>

  1. 添加dataBar數據
  2. newMethod
  3. myMethod可變bar在另一種方法newMethod
  4. 更新dataBar(在愛可信響應)做mountednewMethod(我猜你想在頁面加載後執行此操作)

或者你可以嘗試nextTick

BTW,標題Vue.js Use mounted in v-for ???也許Vue.js Use method in v-for ???

0

我也不相信你應該在v-for使用的方法,而是採用適用的方法,你的項目的未處理陣列可能某處坐在data一個計算性能:

Vue.js 2: Computed

+0

但我需要在我的方法for循環foo。我認爲你不能將變量添加到計算函數中 –

+0

@SanderVanKeer:如果你的數據來自某處(可以創建或作爲道具設置),你可以循環/映射並保存它(充實可能來自api調用的數據或用戶存儲)到計算出的屬性。或者,您可以使計算的函數完成您需要對原始數據執行的所有操作,然後對其進行迭代。你能提供更多的上下文嗎? –