Angularjs 如何使用$rootScope.$broadcast针对特定的离子视图

Angularjs 如何使用$rootScope.$broadcast针对特定的离子视图,angularjs,ionic-framework,ionic,Angularjs,Ionic Framework,Ionic,使用Ionic调用$rootScope.$broadcast($ionicView.enter”)将触发所有具有$ionicView.enter事件处理程序的子视图 如何缩小范围,以特定视图的处理程序为目标?您没有提供任何代码示例,但听起来您所描述的内容不需要触发具有特定数据的事件,而是侦听具有特定数据的事件 也许这个片段可以帮助您: $rootScope.$on( "$ionicView.enter", function( scopes, states ) { //here's

使用Ionic调用$rootScope.$broadcast($ionicView.enter”)将触发所有具有$ionicView.enter事件处理程序的子视图


如何缩小范围,以特定视图的处理程序为目标?

您没有提供任何代码示例,但听起来您所描述的内容不需要触发具有特定数据的事件,而是侦听具有特定数据的事件

也许这个片段可以帮助您:

$rootScope.$on( "$ionicView.enter", function( scopes, states ) {
        //here's an example of storing network error state in rootscope 
        //and some random important state that requires your data to be refreshed 

        if( $rootScope.networkErrorOccurred && states.stateName == "myImportantState" ) {
           //refresh data due to network error code goes here 
        }
    });

调用$rootScope.$broadcast($ionicView.enter)时,“states”对象不存在,因此不能依赖stateName

但是,您可以自己添加,如下所示:

$rootScope.$broadcast('$ionicView.enter', {stateName: 'myImportantState'});
这将使特拉维斯的例子起作用


我可以想到的另一种方法是保存对视图范围的引用,并直接在其上发出事件

我得说我不推荐,但也许这就是你想要的

视图控制器内部

app.controller('someViewCtrl', function($scope) {
  //Save a reference to the view's scope, using window for brevity
  window.someViewScope = $scope;
}
应用程序中的其他地方

window.someViewScope.$emit('$ionicView.enter')

你的目标是什么。您是否尝试以输入视图为目标,如是否希望知道视图何时被导航到?否,我尝试以编程方式触发特定视图的$ionicView.enter事件处理程序。(我的用例是视图已处于活动状态,但如果第一次运行时出现网络连接错误,则需要重新运行事件处理程序)请重新阅读问题。你的回答没有回答这个问题。例如,$rootScope.on($ionicView.enter“,…)将处理所有视图的enter事件。我只对一种特定的观点感兴趣。问题是如何构造事件以仅在一个特定视图/范围内针对现有的enter事件处理程序。我根据有关网络连接错误的评论提供了一个可能的答案。你应该对试图帮助你的人少一点尖刻。你的问题的答案是,不可能广播一个事件,并且让该事件的听众不开火。您只能根据params执行操作,就像我在示例中提供的那样,但不能忽略它。如果您只想触发一个事件,您应该使用自己创建的自定义事件,如“app.NetworkError”,并侦听该事件,然后从此处的$ionicView.enter事件中调用代码。另外,$emit($ionicView.enter)是否是选项而不是$broadcast?由于您没有提供任何代码示例,因此很难确定。如果可能的话,您可以将侦听器上的stopPropagation设置为true,这样它就不会向上传播范围堆栈。