Javascript 在Vue';无法设置属性';数据';未定义的';

Javascript 在Vue';无法设置属性';数据';未定义的';,javascript,vue.js,vuejs2,jsonp,Javascript,Vue.js,Vuejs2,Jsonp,我刚开始用公共Flickr流制作一个简单的单页照片蒸汽应用程序,但根据我目前所做的,我得到了一个错误 '无法设置未定义的属性'data' 我的代码: <b-container> <b-row> <b-col> <p md="4" v-for="photo in Photos">{{photo.id}}</p> </b-col> </b-row> </

我刚开始用公共Flickr流制作一个简单的单页照片蒸汽应用程序,但根据我目前所做的,我得到了一个错误

'无法设置未定义的属性'data'

我的代码:

 <b-container>
    <b-row>
      <b-col>
      <p md="4" v-for="photo in Photos">{{photo.id}}</p>
      </b-col>
    </b-row>
  </b-container>
</template>

<script>
    import jsonp from "jsonp";

export default {
    name: 'PhotoFeed',
    data: function() {
        return {
            Photos: [],
            apiURL: "https://api.flickr.com/services/feeds/photos_public.gne?format=json"
        }
    },
    mounted(){
        this.getFlickrFeed();
    },
    methods: {
        getFlickrFeed(){
            let jsonp = require('jsonp');

            jsonp(this.apiURL, {name:'jsonFlickrFeed'}, function(err,data) {
                this.data = data;
                var self = this;
                if (err){
                    console.log(err.message);
                }
                else {
                    this.Photos = self.data;
                }
            });
        }
    }
}
</script>

{{photo.id}

从“jsonp”导入jsonp; 导出默认值{ 名称:'PhotoFeed', 数据:函数(){ 返回{ 照片:[], apiURL:“https://api.flickr.com/services/feeds/photos_public.gne?format=json" } }, 安装的(){ 这是.getFlickrFeed(); }, 方法:{ getFlickrFeed(){ 让jsonp=require('jsonp'); jsonp(this.apirl,{name:'jsonFlickrFeed'},函数(err,data){ 这个数据=数据; var self=这个; 如果(错误){ 控制台日志(错误消息); } 否则{ this.Photos=self.data; } }); } } }
您希望
var self=this
在匿名函数定义之外,这样
这个
关键字就不会被新函数遮挡

getFlickrFeed () {
    let jsonp = require('jsonp');
    var self = this;     // now self refers to the vue component and can
    // access the Photos property in data

    jsonp(this.apiURL, { name:'jsonFlickrFeed' }, function (err,data) {

        if (err){
            console.log(err.message);
        }
        else {
            // also use self.Photos to refer to the Vue component
            self.Photos = data;
        }
    });
}
最简单的方法是使用箭头函数而不是匿名函数:

jsonp(this.apiURL, { name:'jsonFlickrFeed' }, (err, data) => {
    if (err) {
        console.log(err.message);
    }
    else {
        this.Photos = data;
    }
})

您希望
var self=this
在匿名函数定义之外,这样
this
关键字就不会被新函数遮挡

getFlickrFeed () {
    let jsonp = require('jsonp');
    var self = this;     // now self refers to the vue component and can
    // access the Photos property in data

    jsonp(this.apiURL, { name:'jsonFlickrFeed' }, function (err,data) {

        if (err){
            console.log(err.message);
        }
        else {
            // also use self.Photos to refer to the Vue component
            self.Photos = data;
        }
    });
}
最简单的方法是使用箭头函数而不是匿名函数:

jsonp(this.apiURL, { name:'jsonFlickrFeed' }, (err, data) => {
    if (err) {
        console.log(err.message);
    }
    else {
        this.Photos = data;
    }
})

您可以使用箭头函数
()=>
,并在回调上下文中使用
this
,如下所示:

           jsonp(this.apiURL, {name:'jsonFlickrFeed'}, (err,data)=> {
            this.data = data;
            if (err){
                console.log(err.message);
            }
            else {
                this.Photos = this.data;
            }
        });

您可以使用箭头函数
()=>
,并在回调上下文中使用
this
,如下所示:

           jsonp(this.apiURL, {name:'jsonFlickrFeed'}, (err,data)=> {
            this.data = data;
            if (err){
                console.log(err.message);
            }
            else {
                this.Photos = this.data;
            }
        });