多个角度控制器中的onsen navigator postpush事件监听器

时间:2015-08-02 15:15:14

标签: angularjs onsen-ui

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

相关联
  • C1 (v1.html)C2 (v2.html)C3 (v3.html)

我从nav.pushPage()v1.html发送v2.html,然后从那里发送到v3.html。我尝试使用C2事件监听器初始化C3postpush的范围变量。

现在,我感到困惑的是nav.on('postpush')事件监听器的位置。如果我将其放在C2C3中,那么在转移到v3.html时,会触发C2C3个事件侦听器。经过一些文档和问题后,似乎是预期的行为。但我应该担心吗?

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

请告诉我是否需要使用代码段,因为以上所有内容都与onsen API相关,这应该是可以理解的。

1 个答案:

答案 0 :(得分:2)

AngularJS中的

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

它在导航器的范围内使用一个函数并将其用作侦听器。像这样,它只会被设置一次,所以不必担心许多听众同时被解雇。

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

链接页面元素后会触发事件,因此我相信控制器将在事件触发前初始化。您可以使用前面提到的方法来触发&#34;触发&#34;你想要的时候(服务,父控制器或子事件)你的初始化。

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

希望它有所帮助!