多个 angular 控制器中的 onsen navigator postpush 事件侦听器

onsen navigator postpush event listeners in multiple angular controllers

假设我有 3 个控制器,每个控制器与不同的 <ons-page>:

我从 v1.html 发射 nav.pushPage()v2.html,然后从那里发射到 v3.html。我正在尝试使用 postpush 事件侦听器为 C2C3 初始化范围变量。

现在,我感到困惑的是 nav.on('postpush') 事件侦听器的放置。如果我将它放在 C2C3 中,那么在移动到 v3.html 时,C2C3 事件侦听器都会被触发。在浏览了一些文档和问题之后,这似乎是预期的行为。但是我应该为此担心吗?

我尝试在所有控制器的 $scope.$on('$destroy') 上使用 nav.off('postpush') 方法禁用事件,但它似乎不起作用,因为 pushPage()v1.html 上不会破坏 C1's 作用域。有什么解决方法?我应该在哪里禁用侦听器?

让我知道是否需要代码片段,因为以上所有内容都与温泉有关API,这应该很容易理解。

postpush AngularJS 中的事件侦听器应使用导航器和其他组件具有的 ons-postpush 属性进行设置:http://onsen.io/reference/ons-navigator.html#attributes

它在导航器范围内获取一个函数并将其用作侦听器。像这样,它只会被设置一次,所以不用担心很多监听器同时被触发。

在该侦听器中,您可以设置动画结束时的变量或任何您需要的变量,然后从 ons-page 控制器访问它们。您的 ons-page 控制器很可能是导航器控制器的子控制器,因此也许您可以使用它们的 $parent。您也可以触发子事件并从页面控制器捕获它们,或者简单地使用服务来共享您需要的任何东西。

链接页面元素后触发事件,所以我相信控制器会在触发事件之前初始化。你可以使用前面提到的方法"trigger"你想要的初始化(服务,父控制器或子事件)。

也许 onTransitionEnd 回调对您也有用:http://onsen.io/reference/ons-navigator.html#method-pushPage

希望对您有所帮助!