多个 angular 控制器中的 onsen navigator postpush 事件侦听器
onsen navigator postpush event listeners in multiple angular controllers
假设我有 3 个控制器,每个控制器与不同的 <ons-page>
:
C1 (v1.html)
、C2 (v2.html)
、C3 (v3.html)
我从 v1.html
发射 nav.pushPage()
到 v2.html
,然后从那里发射到 v3.html
。我正在尝试使用 postpush
事件侦听器为 C2
和 C3
初始化范围变量。
现在,我感到困惑的是 nav.on('postpush')
事件侦听器的放置。如果我将它放在 C2
和 C3
中,那么在移动到 v3.html
时,C2
和 C3
事件侦听器都会被触发。在浏览了一些文档和问题之后,这似乎是预期的行为。但是我应该为此担心吗?
我尝试在所有控制器的 $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
希望对您有所帮助!
假设我有 3 个控制器,每个控制器与不同的 <ons-page>
:
C1 (v1.html)
、C2 (v2.html)
、C3 (v3.html)
我从 v1.html
发射 nav.pushPage()
到 v2.html
,然后从那里发射到 v3.html
。我正在尝试使用 postpush
事件侦听器为 C2
和 C3
初始化范围变量。
现在,我感到困惑的是 nav.on('postpush')
事件侦听器的放置。如果我将它放在 C2
和 C3
中,那么在移动到 v3.html
时,C2
和 C3
事件侦听器都会被触发。在浏览了一些文档和问题之后,这似乎是预期的行为。但是我应该为此担心吗?
我尝试在所有控制器的 $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
希望对您有所帮助!