Angularjs 从工厂触发角度$broadcast

Angularjs 从工厂触发角度$broadcast,angularjs,Angularjs,我正在运行一个仪表板系统,页面上的小部件将呈现一些网格和图表。我现在正在设置一个我们称之为“Widget Linking”的东西,点击一个网格将转到一个图表Widget,并显示与我刚才点击的网格行相关的数据 示例:“将树列表(父窗口小部件)链接到条形图(子窗口小部件)” 在本例中,我有剑道树列表选择事件,它将当前选择的行传递给我的widgetLinkingFactory因子。这个工厂应该遍历我页面上所有可用的小部件,以查看是否有任何图表(子小部件)链接到此树列表(父小部件) 我想设置一个角度观察

我正在运行一个仪表板系统,页面上的小部件将呈现一些网格和图表。我现在正在设置一个我们称之为“Widget Linking”的东西,点击一个网格将转到一个图表Widget,并显示与我刚才点击的网格行相关的数据

示例:“将树列表(父窗口小部件)链接到条形图(子窗口小部件)”

在本例中,我有
剑道树列表
选择
事件,它将当前选择的行传递给我的
widgetLinkingFactory
因子。这个工厂应该遍历我页面上所有可用的小部件,以查看是否有任何图表(子小部件)链接到此树列表(父小部件)

我想设置一个角度观察者,然后在我的树状列表中触发一个
$broadcast
选择事件。但是,我一直遇到这个问题,无法将
$scope
注入服务或工厂

带有树列表选择事件的工厂代码(请参见
dataModelOptions.change
):

“严格使用”;
角度。模块('app')
.factory('TreeListDataModel',函数(WidgetDataModel,widgetLinkingFactory){
函数树ListDataModel(){
}
TreeListDataModel.prototype=Object.create(WidgetDataModel.prototype);
TreeListDataModel.prototype.constructor=WidgetDataModel;
角度扩展(TreeListDataModel.prototype{
init:函数(){
//剑道数据源对象在此初始化。。。
//剑道树人选择活动!!
this.dataModelOptions.change=函数(e){
var row=this.dataItem(this.select());
var parentObj=u2;.find(this.dataItems(),{id:row.parentId});
var dataModelOptions={
行:行,,
parentObj:parentObj,
尺寸:此为.options.dimensions,
fieldTypes:this.options.fieldTypes
};
//此处无法执行此操作-$SCOPE不可用!!!
$scope.$broadcast('refreshLinkedWidgets',dataModelOptions);
widgetLinkingFactory.linkCharts(行、父对象、this.options.dimensions、this.options.fieldType);
},      
this.updateScope(this.dataModelOptions);
},
updateScope:函数(数据){
this.datamodelpoptions=数据;
},
销毁:函数(){
WidgetDataModel.prototype.destroy.call(this);
}
});
返回TreeListDataModel;

});从中注入$rootScope和$broadcast。

工厂/服务没有
范围
。您不能在
范围内执行此操作

但是你可以通过在你的服务中注入
rooScope
来做到这一点

像这样

TreeListDataModel
中声明名为
refreshLinkedWidgets

然后

示例代码

angular.module('app')
.factory('TreeListDataModel', function (WidgetDataModel, widgetLinkingFactory,$rootScope) {

   var TreeListDataModel={
     refreshLinkedWidgets:refreshLinkedWidgets
   };
   function refreshLinkedWidgets(e,a){
      // some code
   }
   $rootScope.$on("refreshLinkedWidgets", TreeListDataModel .refreshLinkedWidgets);
    return TreeListDataModel;
}

哦,天哪,我没有意识到我可以注入
$rootScope
。我想我已经试过了-(
angular.module('app')
.factory('TreeListDataModel', function (WidgetDataModel, widgetLinkingFactory,$rootScope) {

   var TreeListDataModel={
     refreshLinkedWidgets:refreshLinkedWidgets
   };
   function refreshLinkedWidgets(e,a){
      // some code
   }
   $rootScope.$on("refreshLinkedWidgets", TreeListDataModel .refreshLinkedWidgets);
    return TreeListDataModel;
}