【问题标题】:Parsing data from vue component with ajax使用ajax从vue组件解析数据
【发布时间】:2019-02-26 07:59:41
【问题描述】:

我有一个名为“testrow”的 vue 组件。在其中,我有一个包含 2 个选项的表单,第一个是“描述”,第二个是“参数”。我的脚本应该以“参数”根据我的数据库中相应的“描述”而变化的方式运行。这是通过我的网络路由调用的控制器中的一个函数完成的。我在我的函数中使用名为“填充”的方法中的 ajax,如下所示:

methods: {
        populate: ()=>{
            $.ajax({
                headers: {
                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                },
                url:'/parametersByDescription',
                type: 'POST',
                data: {description: description},
                success: function(data){ 
                    store.parameter = data;
                }
            })              
            return;
        }
    }

我无法将“description”值作为名为“description”的键发送到我的函数,因为它在下面的代码部分中未定义:

data: {description: description},

我找不到想要使用的“描述”值的正确名称。但是,通常会使用 {description: vm.description},因为这是一个 vue 组件,模板中的所有数据、方法和 :name 都在名为“testrow”的组件中隔离,我不知道它的“名称”是什么"是。

在 Vue Devtools 中,我有 Root 和 Testrow,在 Testrow/data 中,我有我想要的“描述”值所在的“描述”。

【问题讨论】:

  • 您是否尝试过使用:data: {description: this.description}
  • 感谢您的反馈!我只是通过使用 data: {description: this.something} 来实现的,其中一些东西是预定义的。我已经更改了控制器中的函数以反映“某物”的值。这是我从 Vue Devtools 收到的错误消息:Uncaught TypeError: Cannot read property 'something' of undefined at VueComponent.populate (create:743) at invoker (app.js:38145) at HTMLSelectElement.fn._withTask.fn._withTask (app.js:37944)

标签: jquery ajax vue.js


【解决方案1】:

通常,在没有改变作用域的情况下,你应该使用this,所以在箭头函数中,它会这样使用:this.description

但是,当您使用 jQuery 或其他一些外部库时,范围会发生变化,然后this 会引用其他对象。

解决方案是将 Vue 对象分配给某个新变量,然后在更改的范围内使用该变量。另外,请确保您已将 description 声明并定义为道具或模型:

data(){
    return{
        description : '', //declare and define
    }
},
methods: {
    populate: ()=>{
        var self = this; //assigning Vue's this to self variable
        $.ajax({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            },
            url:'/parametersByDescription',
            type: 'POST',
            data: {description: self.description}, //using it instead of this.
            success: function(data){
                self.store.parameter = data; //probably needed here too
            }
        })
        return;
    }
}

所以除了在组件的模板中提供描述作为模型:

<input v-model="description"/>

【讨论】:

  • 感谢您的反馈!我现在明白我需要一种方法来引用我所在的范围。不幸的是,这种方法不起作用,还有其他方法可以引用范围吗?
  • 看起来那个描述不存在,不是模型,不是道具。也许您应该在模板和数据中提供它作为模型?
  • 是的!我避免添加更多道具,但我在 root 的数据中添加了描述,并用 data{description: vm.description} 调用了值谢谢!
  • 它有效,在这种情况下它不是我真正需要的,但它很酷。
猜你喜欢
  • 2017-12-01
  • 2016-03-26
  • 1970-01-01
  • 2020-07-14
  • 2016-12-20
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2013-06-04
相关资源
最近更新 更多