Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vuejs2 我可以在vuejs 2中处理方法中的“后退”按钮吗?_Vuejs2 - Fatal编程技术网

Vuejs2 我可以在vuejs 2中处理方法中的“后退”按钮吗?

Vuejs2 我可以在vuejs 2中处理方法中的“后退”按钮吗?,vuejs2,Vuejs2,在VueJS2中我需要一些帮助。我想检测后退按钮按下事件。我做了一些研究,发现了这个 document.addEventListener("backbutton", yourCallBackFunction, false"); 我认为这是一个全球性的事件。我需要一些本地的东西,在一个方法内。在那里我可以使用一些逻辑 methods: { backButtonPressed() { } } 或者我可以将全局函数绑定到局部函数吗?有人能帮我吗?TIA在根Vue组件(Vue实例绑定

在VueJS2中我需要一些帮助。我想检测后退按钮按下事件。我做了一些研究,发现了这个

document.addEventListener("backbutton", yourCallBackFunction, false");
我认为这是一个全球性的事件。我需要一些本地的东西,在一个方法内。在那里我可以使用一些逻辑

methods: {
    backButtonPressed() {
    }
}

或者我可以将全局函数绑定到局部函数吗?有人能帮我吗?TIA

在根Vue组件(Vue实例绑定到的组件)上的
挂载的
方法上添加事件

var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  },
  methods: {
    yourCallBackFunction () {
      // Your logic
    }
  }
  mounted () {
    document.addEventListener("backbutton", this.yourCallBackFunction, false);
  },
  beforeDestroy () {
    document.removeEventListener("backbutton", this.yourCallBackFunction);
  }
})
我们也会在销毁之前在
上删除它,以保持整洁

注意:我个人没有使用back button事件,所以我将其添加到此示例中,只是因为您说它正在工作,但需要一种全局处理它的方法。这段代码正好可以做到这一点


注意:根据@Luke的评论-我们在挂载事件中添加了侦听器,因此它不会在SSR上下文中执行。如果SSR不是一个因素/考虑因素,那么我们可以使用创建的
生命周期挂钩。

如果仍然有人遇到此问题。 浏览器返回事件侦听器的解决方案是

window.onpopstate=function(){
警报(“浏览器返回”);

}
如果您使用的是vue路由器(不知道是否使用,为什么…),一个好的解决方案是在您的组件中使用:

  beforeRouteLeave(to, from, next) {
 if (from.name === 'nameOfFromRoute' && to.name === 'nameOfToRoute' ) {
   next(false);
 } else {
   next();
 }
 console.log({ to, from });

},

很容易,如果只需要捕获组件的行为,可以在组件根目录中使用
beforeRouteSave
函数

例如:

beforeRouteLeave (to, from, next) {
 const answer = window.confirm('Do you really want to leave?)
   if (answer) {
      next()
   } else {
      next(false)
   }
 }

但是,如果需要全局添加此行为,则在进入路由之前需要使用
捕获。

我有一个类似的问题,并使用@click=“backFunction” 并在如下方法上创建函数:

methods: {
backFunction(){
//yourlogic
},

backbutton事件用于,您是否正在为智能手机构建应用程序?如果您正在使用vue路由器,并且需要(验证某些数据或显示某些警报)在离开路线之前,您可以尝试使用beforeLeave guard。@choasia是的,我正在为智能手机构建应用程序。我已经尝试了backbutton事件。但我必须全局处理它。是否可以在方法中处理它:{}?@非常感谢您的回复。但我认为vue route无法解决我的问题。我正在尝试构建一个移动应用程序,当用户单击“移动后退”按钮时,我需要在该应用程序中进行监听。兄弟..感谢您的回复..是的,它是有效的。但是您的代码中有一点更正。document.addEventListener('backbutton',this.backbutton pressed,false);您应该编辑此内容,然后我会将您的答案标记为正确。使用
挂载的
而不是
创建的
使其仅在CSR中工作。此代码不应在SSR中执行。在Chrome Android和桌面上都尝试了此解决方案-两者都不工作。在Chrome和Safari桌面上测试。我有一个奇怪的行为r当我使用vue更改路由时,onpopstate被激发,而不仅仅是当我单击浏览器的“后退”按钮时。我如何使用我的vue方法之一代替警报(“浏览器后退”)?假设我想关闭backbutton上的弹出窗口,我有一个方法hide(),但当我尝试此方法时,其中的hide()错误是“this.hide不是函数”..@HassanSaqib您应该使用一个箭头函数来设置“this”:window.onpopstate=()=>{alert('browser-back');};Carl的问题是因为在vue路由器进行检查后,popstate事件会触发。。。