【问题标题】:Vue.js Use method in v-forVue.js 在 v-for 中使用方法
【发布时间】:2018-01-09 16:04:41
【问题描述】:

我想在我的 Vue 组件的 v-for 中运行一个方法。 示例:

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

当我这样做时,p-tag 只是保持为空。这是我的方法(带有 axios 调用):

 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 调用时,该方法似乎有效

谢谢!

【问题讨论】:

  • 您缺少属性 btw 的结束引号
  • 这只是一个简化的例子,我在ajax url中使用它们

标签: javascript loops methods vue.js


【解决方案1】:

我认为你不应该在v-for 中使用myMethod

axios 是异步的

尝试用另一种方法做myMethodbar,得到一个数据newbar,可以渲染newbar

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

  1. 在数据中添加dataBar
  2. 用另一种方法newMethod 用变量barmyMethod
  3. 更新dataBar(axios 响应)在newMethod
  4. mounted 中执行newMethod(我猜你想在页面加载后执行此操作)

或者你可以试试nextTick

顺便说一句,标题Vue.js Use mounted in v-for ???也许Vue.js Use method in v-for???

【讨论】:

    【解决方案2】:

    您的代码有问题。你错过了一个报价 <div v-for="(foo,index) in bar"> <p>{{myMethod(foo,index)}}</p> </div>

    请参考以下jsbinhttp://jsbin.com/wovavut/edit?html,js,output

    【讨论】:

    • 你还是可以参考jsbin
    • 感谢您,我发现 axios 导致了问题。请检查我编辑的问题
    【解决方案3】:

    我也不认为您应该使用v-for 中的方法,而是使用计算属性,将您的方法应用于可能位于data 某处的未处理项目数组:

    Vue.js 2: Computed

    【讨论】:

    • 但是我的方法中需要来自 for 循环的 foo。而且我认为您不能将变量添加到计算函数中
    • @SanderVanKeer:如果您的数据来自某个地方(在 created 或 props 中设置),您可以循环/映射并保存它(可能包含来自 api 调用或用户存储的数据)到计算的属性。或者,您可以使计算函数对原始数据执行您需要执行的所有操作,然后对其进行迭代。你能提供更多背景信息吗?
    猜你喜欢
    • 2021-02-12
    • 2018-01-21
    • 2017-03-23
    • 2019-05-07
    • 2020-07-18
    • 2019-12-25
    • 2016-11-16
    • 2019-09-15
    • 1970-01-01
    相关资源
    最近更新 更多