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