Laravel 和 Vue.js 循环函数

Posted

技术标签:

【中文标题】Laravel 和 Vue.js 循环函数【英文标题】:Laravel and Vue.js loop function 【发布时间】:2020-05-04 18:11:54 【问题描述】:

我正在尝试一次循环显示一些新的内容,在我完成此操作 8 次后,它应该获取数据(如果已更新)并再次执行此操作。我知道新闻的最大数量是 8,每个新闻可以包含视频或图像,所以基于此我需要更改我的结果,但这不是问题。问题是,我似乎无法找到“正确”的方式来循环浏览我的新闻而不会崩溃。不对,我得到了这个解决方案(超时功能使我的应用程序崩溃)。

<template>
    <div>
        <div class="a_news">
            <div class="full">
                <h1 class="title" v-if="title">title</h1>
            </div>
            <div class="left">
                <div class="text"  v-if="text">text</div>
            </div>
            <div class="right">
                <!--div class="image" v-bind:style=" 'background': 'url(none)' "></div-->
                <div class="image"  v-if="image">image</div>                   
            </div>
        </div>
    </div>
</template>

<script>
    let timing = '5000';
    import VideoPlayer from "./VideoPlayer";

    export default 
        data() 
            return 
                news: [],
                title: 'getting headline',
                text: 'getting text',
                image: 'getting image',
                //videoEntry: 'getting entry'
            
        ,
        components: 
            'videoplayer': VideoPlayer
        ,
        created() 
            this.getData(false,0); // first run
        ,
        methods: 
            getData(oldnum, num) 
                const CORS_PROXY = "https://cors-anywhere.herokuapp.com/";
                axios.get(CORS_PROXY + URL +'/news.json').then(resp => 

                    if (resp.data) 
                        console.log(resp.data)
                        if (oldnum === false) 
                            this.news = []; // reset news array
                            this.news = resp.data.slides;
                            console.log("sletter array")
                        

                        this.startSlideNews(oldnum, num)
                        //return this.news;
                     
                );
            ,
            startSlideNews(oldnum, num) 
                console.log(oldnum, num)
                this.title = this.news[num].title; 
                this.text = this.news[num].text; 
                // video ?
                if (this.news[num].videos.length > 0) 
                    if (this.news[num].videos[0] != null) 
                        this.videoEntry = this.news[num].videos[0].entryid;
                     else 
                        console.log("video, but no videofile");
                    
                 else 
                    if (this.news[num].images[0] != null) 
                        this.image = this.news[num].images[0];
                     else 
                        // no picture found
                    
                

                var customDelay = new Promise(function(resolve) 
                    var delay = 10000; // milliseconds
                    var before = Date.now();
                    while (Date.now() < before + delay) ;
                    resolve('Success!');
                );

                customDelay.then(function() 
                    if (oldnum == false) 
                        oldnum = num;
                    
                    if (oldnum >= 0) 
                        oldnum = num;
                        num = num + 1
                    
                    if (num >= 8) 
                        this.getData(false, 0)
                     else 
                        this.getData(oldnum, num) <--- THIS IS WHERE THE ERROR HAPPENS?
                        //this.startSlideNews(oldnum, num)
                    
                );        
            

这一直给我错误:

app.js:1990 Uncaught (in promise) TypeError: Cannot read property 'getData' of undefined
    at app.js:1990

【问题讨论】:

使用箭头功能。 customDelay.then(()=&gt; ......) 【参考方案1】:

出现错误是因为 this 在您的承诺中未定义。

你可以做的是:

let that = this
customDelay.then(() => 
     if (oldnum == false) 
        oldnum = num;
     
     if (oldnum >= 0) 
        oldnum = num;
        num = num + 1
     
     if (num >= 8) 
        that.getData(false, 0)
      else 
        that.getData(oldnum, num)
     
); 

customDelay.then(() => 
     if (oldnum == false) 
        oldnum = num;
     
     if (oldnum >= 0) 
        oldnum = num;
        num = num + 1
     
     if (num >= 8) 
        this.getData(false, 0)
      else 
        this.getData(oldnum, num)
     
.bind(this)); 

我认为这将解决您的错误。

你也可以找到答案here。

祝你好运!

【讨论】:

以上是关于Laravel 和 Vue.js 循环函数的主要内容,如果未能解决你的问题,请参考以下文章

laravel 刀片模板中的 Vue.js v-for 循环

在子级循环中获取父级 json 数据。 (Laravel Vue js)

Laravel 6 + Vue.js 无法挂载组件:未定义模板或渲染函数

时刻 js fromnow 函数到 vue js laravel

Vue.js 不知道如何将 props 传递给 map() 函数和循环组件

Vue。 Js Laravel 统计 JSON 的元素