账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    如何用axios的结果更新Vue列表?
    27
    0

    现在有一个字符串和一个列表要用axios中取到的结果更新,更新列表的时候有几个本地值要先显示,然后axios取到的结果添加到列表的后面,我研究了大半天,只找到把更新函数全加到created钩子中这么一种方法,请教一下大佬们是否有其他更好的办法来更新数据。

    <html>
    
    <head>
        <title>index</title>
        <meta charset="utf8">
    </head>
    
    <body>
        <div id="app">
            <h1>{{greeting}}</h1>
            <ul>
                <li v-for="item in items">
                    {{item}}
                </li>
            </ul>
        </div>
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
        <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
        <script>
            let vm = new Vue({
                el: '#app',
                data() {
                    return {
                        greeting: '',
                        items: []
                    }
    
                },
                computed: {
    
                },
                methods: {
                    update_greeting: function () {
                        axios.get('https://httpbin.org/ip')
                            .then(resp => {
                                this.greeting = 'hello'
                                console.log('greeting updated')
    
                            })
                            .catch(err => console.error(err))
                    },
                    update_items: function () {
                        this.items = [1, 2, 3]
                        axios.get('https://httpbin.org/ip')
                            .then(resp => {
                                this.items.push(4)
                                console.log('items updated')
    
                            })
                            .catch(err => console.error(err))
                    },
                },
                created: function () {
                    this.update_greeting()
                    this.update_items()
                }
            })
        </script>
    </body>
    
    </html>

    我还试过一种逗比办法是把初始值放到data中,然后在计算属性中更新data,这样虽然倒是可以更新,但是至少更新两次,而且一不小心就死循环了,想来想去好像除了created钩子外没有什么好办法。请问大佬们在这种情况下都是怎么做的?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 六遥之 普通会员 1楼

      在Vue中,你可以使用axios的结果来更新Vue的列表。以下是一个简单的示例:

      首先,你需要在你的Vue项目中引入axios库:

      ```html

      ```

      然后,你可以在你的组件的methods方法中使用axios来发送GET请求,并将响应转换为Vue的数据结构:

      js export default { methods: { fetchData() { axios.get('https://api.example.com/data') .then(response => { this.data = response.data; }) .catch(error => { console.error(error); }); } } }

      在这个例子中,fetchData方法会发送一个GET请求到https://api.example.com/data,然后将响应转换为Vue的数据结构。

      然后,你可以在你的Vue组件的列表中使用这个数据结构:

      js export default { props: { data: { type: Array, required: true } }, mounted() { this.$data = this.data.map(item => item); } }

      在这个例子中,mounted生命周期钩子函数会将组件的数据结构转换为axios的响应数据,并将其赋值给组件的$data属性。然后,你可以在你的列表中使用这个数据结构。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部