我正在使用AngularJs 1.5 . 我正在使用ng-route创建SPA . 对于2个模板,我使用了新的Angular组件作为模板让我们称之为'employee'和'company' . 在每个路由中都有一个子组件,它搜索公司数据库,称之为companySrch . 子组件的工作原理是当用户想要在该模板中搜索公司数据库时,companySrch组件被加载到“公司”或“员工”中 . 当用户在搜索结果中选择记录时,记录通过注册的RXJS可观察广播,如下所示:
companySrch.getRecordFn = function(result){
companySrch.output={id:result.cs_id, type:result.type,name:result.name, active: result.active};
//BROADCAST RECORD SELECTED via companySrchService
companySrch.companySrchService.recordBroadcast(companySrch.output);
companySrch.navService.nav.navExt = false;
}
然后,如果用户位于员工或公司模板中,则该记录将通过模板的订阅传递给RXJS事件 . 模板员工和公司的示例分别为:
employee.companySrchService.subscribe(function(obj) {//SELECTRECORD IS PASSED VAR FROM BROADCAST FUNCTION
//GET COMPANY RECORD UPON BROADCAST
employee.submit[0].cs_name = obj.name;
employee.submit[0].cs_type = obj.type;
employee.submit[0].fk_cs_id = obj.id;
//employee.getRecordFn(obj.id);
});
company.companySrchService.subscribe(function(obj) {//SELECTRECORD IS PASSED VAR FROM BROADCAST FUNCTION
//GET COMPANY RECORD UPON BROADCAST
company.getRecordFn(obj.id);
});
当我在员工模板和companySrch记录中进行广播时,我遇到的问题是,在我之前加载公司模板的假设下,“公司”也会触发订阅事件 . 因此,这会导致错误 . 我认为当模板切换时组件被完全杀死?如果模板不在视图中,有什么方法可以阻止RXJS订阅事件发生?
1 回答
我们可以创建一个在指令的
$destroy
事件被触发后立即发出的主题 .我们可以更新我们订阅的流,以便在
destroy$
发出一次后立即停止发出项目:这将导致您的订阅回调在
$destroy
事件发生后立即停止触发 .