【Vue】vue 嵌入app内部,调用app的选择图片和录制视频功能的时候,当前的.vue文件方法失效

一、调用app的选择图片和录制视频功会遇到的问题

注意:所有的全局方法都必须写在index.html页面,或者把写在公共的js,然后引入index.html页面上,否则页面会找不到这些全局的方法

一、

1、调用完app的功能之后,前端是不知道用户在app中进行的是选择,还是取消操作

解决办法:

在app中调用app端提供的功能之后,应该需要写一个全局的方法用于传送图片地址,或者是其他参数,app端进行调用这个方法

window.setimgurl = function(data){
console.log(data);
})

二、
2、调用完方法之后,回到页面的时候,发现页面上的所有方法都不能调用了,就好像消失了一样,我在网上找了好久都没找到原因,最后我觉得应该可能是调用完的方法之后,返回vue页面的时候,页面认为你调用app的时候离开了页面,所以页面的生命周期已经结束了,所以不管在哪里进行调用当前页面的方法都已经失效了,然后通过在created里面,alert(this),然后在app中查看,你会发现,调用app的功能之前和之后,this指针的vue的信息是不一样的,当你调用app的功能之后回到这个页面上打印的this根本找不到那些方法

解决办法:

1、当app回到当前页面之后,写个全局的方法

window.reloadpage = function(){
    window.reload();
},

然后让app端调用这个方法,这个时候页面就刷新了,这样的话,就解决问题了,但是,这个问题有个弊端,就是当前页面的缓存全部都没了,不过呢,也可以app回调你的方法的时候,把参数传过来,然后你把参数存到浏览器的缓存中

window.reloadpage = function(data){
    localStorage.setItem('data', data); 
    window.reload();
}

然后再刷新页面,再从本地缓存拿到你自己的需要的参数,但是这样的话,用户体验就不怎么好了,每次调用app端的功能,页面就要刷新一遍,不过还是可以解决问题的。

    localStorage.getItem('data');

2、这个方法就不需要刷新页面了,我们可以在vue的created里面

created () {
    window.vueaddStudent = window.vueaddStudent || this;
}

写个全局的方法,需要app端进行调用,这个方法也有个缺点,就是只能在app调用全局方法之后,我们才能得到当前的this,而且这个方法是一次性的,当window.postAddStudent的方法结束了之后,当前的.vue文件的其他方法还是不能调用,要么就再写一个全局的方法去通知app端,再让app端进行调用我们的全局方法。

window.postAddStudent = function(data) {
    var _this = window.vueStudentDetail;
    //这个_this,就是你当前.vue文件的this,这样的话,
    就可以拿到当前.vue文件中的所有参数,而且可以调用.vue文件的所有方法,
    其实就是借用app端调用全局的方法,使我们可以调用到对应的.vue文件中,
    而不会找不到对应的.vue文件。
    console.log(_this);
}

猜你喜欢

转载自blog.csdn.net/lgysjfs/article/details/79699341