假设我有3个控制器,每个控制器与不同的<ons-page>
:
C1 (v1.html)
,C2 (v2.html)
,C3 (v3.html)
我从nav.pushPage()
向v1.html
发送v2.html
,然后从那里发送到v3.html
。我尝试使用C2
事件监听器初始化C3
和postpush
的范围变量。
现在,我感到困惑的是nav.on('postpush')
事件监听器的位置。如果我将其放在C2
和C3
中,那么在转移到v3.html
时,会触发C2
和C3
个事件侦听器。经过一些文档和问题后,似乎是预期的行为。但我应该担心吗?
我尝试在所有控制器的nav.off('postpush')
上使用$scope.$on('$destroy')
方法停用事件,但它似乎无效,pushPage()
v1.html
不会破坏C1's
范围。为此解决了什么?我应该在哪里禁用监听器?
请告诉我是否需要使用代码段,因为以上所有内容都与onsen API相关,这应该是可以理解的。
答案 0 :(得分:2)
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
希望它有所帮助!