我有一个页面,其中列出了每个可以执行某些操作的潜在客户。每个操作都是一个表单,因此可以在同一页面上多次显示相同的表单。
每个表单都有自己的范围和它自己的控制器实例。提交表单时,我调用服务来执行ajax操作,完成后我广播一条消息,然后在控制器中我收听消息。问题是因为表单的每个实例都有自己的控制器实例,每个表单都会触发偶数监听器。我怎样才能为活动控制器调用它?这是一些样本代码:
服务:
/**
* Delegate downline submit
*/
delegatedDownlineSubmit(delegateDownLineModel: IDelegateDownLineModel) {
this.PostJson('/api/Lead/DelegateDownLine', delegateDownLineModel)
.success(function (response: IAjaxResponse) {
if (response !== null) {
LeadServices.rootScope.$broadcast('LeadService.DelegatedDownlineSubmitted', response);
}
});
}
Controller - 为每个表单实例调用一次:
delegateDownLineFormScope.$on('LeadService.DelegatedDownlineSubmitted', function (event: ng.IAngularEvent, ajaxResponse: IAjaxResponse) {
//Do stuff
});
我也试过只在范围内调用广播:
LeadServices.rootScope.BroadcastToElement('#Lead_123 form[name=DelegateDownLineForm]', 'LeadService.DelegatedDownlineSubmitted', response);
/**
* Broadcast a message to another element on the page
*/
scope.BroadcastToElement = function (selector: any, message: string, ...args: any[]) {
var broadcastArgs = [message];
if (args) {
broadcastArgs = broadcastArgs.concat(args);
}
return angular.element(selector).scope().$broadcast.apply(this, broadcastArgs);
};
提前感谢您的帮助。
答案 0 :(得分:1)
每个表单都有自己的范围和它自己的控制器实例。
和
我怎样才能为活动控制器调用它
您如何确定active controller
?如果像active = true
这样的东西只是在偶数监听器中使用它:
delegateDownLineFormScope.$on('LeadService.DelegatedDownlineSubmitted', (event: ng.IAngularEvent, ajaxResponse: IAjaxResponse) => {
if(this.active){
//Do stuff
}
});
另请注意,我使用的是箭头(=>
)功能。