Vue.js 2.0 - 在方法 AJAX Axios 中传递参数

Posted

技术标签:

【中文标题】Vue.js 2.0 - 在方法 AJAX Axios 中传递参数【英文标题】:Vue.js 2.0 - Passing arguments in methods AJAX Axios 【发布时间】:2017-08-18 19:32:38 【问题描述】:

我需要在使用 ajax axios 的方法中传递参数。

    var app = new Vue(
    el: '#app',
    data: 

        urlAdmission: 
        admissions: [
                         name : 'asdf',
                         name : 'sd'
                    ]
    ,
    mounted: function()
        this.allAdmissions()

    ,
    methods: 

        allAdmissions: _.debounce( function()
            var app = this
            axios.get('http://localhost/school/api/hello')
                .then( function(response )
                    app.admissions = response.data.admissions
                )
                .catch( function(error)
                    console.log(error)
                )
        )
    
);

正如您在mounted 中看到的,我调用方法this.allAdmissions() 我需要传递一个参数,以便我可以重用该函数。例如 this.allAdmissions('http://localhost/school/api/hello')。然后在 axios.get('url') 中使用它。谢谢

【问题讨论】:

您只需要_.debounce(function(url), delay)。 Debounce 将传递参数。 我可以这样传递它吗?allAdmission('htpp://localhost/school/api/hello') 然后使用 _.debounce(function(url), 500) 调用它。这是正确的吗? 您是想创建一个可重复使用的函数,还是只是确保该函数每半秒执行一次? 感谢它的工作!如此简单的解决方案... 是的,我认为人们只是有点困惑。 【参考方案1】:

看起来您要做的是创建一个可以接受 url 并将 url 的结果绑定到数据中的变量值的函数。以下是您可以这样做的方法。

methods:  
  allAdmissions: _.debounce(function(url, value) 
    axios.get(url)
      .then(function(response) 
        this[value] = response.data.admissions 
      .bind(this)) 
      .catch(function(error) 
        console.log(error) 
      ) 
  )

那么,如果你这样调用那个方法,

this.allAdmissions('http://localhost/school/api/admissions‌​', "admissions")

allAdmissions 会将您数据的admissions 属性设置为您调用的结果。如果您总是想使用response.data.admissions,这很有效,因为您对其进行了硬编码。如果你也希望它是可变的,你可以像这样传递第三个值

methods:  
  getSomeData: _.debounce(function(url, value, responseValue) 
    axios.get(url)
      .then(function(response) 
        this[value] = response.data[responseValue] 
      .bind(this)) 
      .catch(function(error) 
        console.log(error) 
      ) 
  )

【讨论】:

是的,它现在正在工作。我刚刚添加了var app=thisapp[value]=response.data.admissions,但我知道它适用于第三个参数。非常感谢你没有放弃!你是摇滚明星!【参考方案2】:

如果有些需要多个 ajax 请求。这是一个例子。

var app = new Vue(
    el: '#app',
    data: 
        value: '',
        admissions: [],
        schoolyear: []
    ,

    created: function()

        this.ajaxAll()

    ,
    methods: 

        ajaxAll: _.debounce( function()
            var app = this
            var admissions = 'admissions'
            var schoolYear = 'schoolyear'
            axios.all([this.getAllData('http://localhost/school/api/admissions', 'admissions'), this.getAllData('http://localhost/school/api/schoolyear', 'schoolyear')]);


        ),

        getAllData: function(url, value)
            var app = this
            return axios.get(url)
                .then(function(response)
                    app[value] = response.data[value]
                    console.log(response.data.admissions)
                )
        

    
)

感谢@Bert Evans。

【讨论】:

以上是关于Vue.js 2.0 - 在方法 AJAX Axios 中传递参数的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js 2.0 Laravel 5.4 将对象传递给应用程序并跨组件全局使用它

vue2.0的ajax

Vue.js 2.0版

Vue.js 2.0 学习重点记录

预渲染 vue.js 2.0 组件(类似于 vue 1 中的 this.$compile)

Vue怎么和AJAX和其他的方法结合在一起