Angularjs 多个角度控制器中的onsen navigator后推事件侦听器

Angularjs 多个角度控制器中的onsen navigator后推事件侦听器,angularjs,onsen-ui,Angularjs,Onsen Ui,假设我有3个控制器,每个控制器与不同的关联: C1(v1.html),C2(v2.html),C3(v3.html) 我从v1.html向v2.html发射nav.pushPage(),然后从那里发射到v3.html。我正在尝试使用postpush事件侦听器初始化C2和C3的作用域变量 现在,我感到困惑的是nav.on('postpush')事件侦听器的位置。如果我把它同时放在C2和C3中,那么在移动到v3.html时,C2和C3事件侦听器都会被触发。在浏览了一些文档和问题之后,这似乎是预期

假设我有3个控制器,每个控制器与不同的
关联:

  • C1(v1.html)
    C2(v2.html)
    C3(v3.html)
我从
v1.html
v2.html
发射
nav.pushPage()
,然后从那里发射到
v3.html
。我正在尝试使用
postpush
事件侦听器初始化
C2
C3
的作用域变量

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

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


让我知道这是否需要代码片段,因为以上所有内容都与onsen API相关,这应该是可以理解的。

postpush
AngularJS中的事件侦听器应设置为具有导航器和其他组件具有的
ons postpush
属性:

它接受导航器范围内的函数,并将其用作侦听器。这样,它将只设置一次,因此不必担心许多侦听器同时被解雇

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

事件是在链接页面元素之后触发的,因此我相信控制器将在触发事件之前初始化。您可以使用前面提到的方法在需要时“触发”初始化(服务、父控制器或子事件)

也许
onTransitionEnd
回调对您也很有用:


希望有帮助

如果我理解正确,问题是您无法在C2中区分
postpush
C1->C2和C2->C3?在这种情况下,
postpush
事件具有“enterPage”和“leavePage”属性,这两个属性非常有用。@FranDios是的,我现在正在使用这两个属性。但是假设我在两个视图中绑定了控制器
C2
。因此,该控制器将创建两次,从而两次注册
postpush
侦听器。因此,当我从
v2
推到
v3
时,
C2
范围不会被破坏。然后从
v3
推送到
v4(C2)
再次注册
C2
范围。我们现在注册了两个侦听器。如何取消上一个?@FranDios我无法在范围已销毁的情况下执行此操作,因为
v2
页面范围仍处于活动状态。应在导航器的范围内使用
ons postpush
属性设置
postpush
。在这种情况下,即使您在navigator中更改页面,侦听器也只会注册一次。如果要在动画完成时初始化内容,可以在导航器的控制器中的
postpush
上设置一个布尔值,然后根据该布尔值(即
ng If=“$parent.isAnimationFinished”
)或类似值初始化页面控制器上的值。@FranDios Ok。将查看
ons postpush
属性。我不知道那件事。。顺便说一句,你能写一个问题的答案吗?使用
onTransitionEnd
postpush
监听器有什么区别?它们可以互换使用吗?我现在正在使用
onTransitionEnd
方法,在服务中为下一个要使用的页面设置一些值。但正如您所说,下一个控制器在执行
onTransitionEnd
方法之前初始化,因此它看不到将要进行的更改
onTransitionEnd
。我可以用
prepush
event listener做这件事。但这将使我在与我的
导航器关联的单个控制器中编写所有代码。在转移到另一个控制器之前,这里还有其他方法调用当前控制器的方法吗?非常感谢@FranDios的回答。这对我帮助很大。我的应用程序在按照您的建议重构后看起来更干净了。正在接近onsen:)