在我的应用程序中,我有一个页面,显示可以删除文档的特定用户文档的详细信息,以及显示用户最近查看过的文档的另一个页面的详细信息。我试图这样做,当用户删除视图页面中的文档时,它也会删除用户最近查看的文档历史记录中的列表。
我试图使用$ broadcast和$ rootScope在两个模块之间进行通信,但我怀疑我对语法做错了,或者是范围或项目结构存在问题。
这是删除不同条目的两个独立函数
history.js
# Crystal Reports xml2 Parser
library(xml2)
library(dplyr)
# Get the .atomsvc file from the Export to Data Feed Option on the PA DEP website
pa_string <- '<service xmlns:atom="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" xmlns="http://www.w3.org/2007/app"><workspace><atom:title>Oil_Gas_Well_Production</atom:title><collection href="http://www.depreportingservices.state.pa.us/ReportServer?%2FOil_Gas%2FOil_Gas_Well_Production&P_PERIOD_ID=198&P_COUNTY%3Aisnull=True&P_CLIENT%3Aisnull=True&P_PERMIT_NUM%3Aisnull=True&P_OGO_NUM%3Aisnull=True&P_PRODUCING%3Aisnull=True&rs%3AParameterLanguage=&rs%3ACommand=Render&rs%3AFormat=ATOM&rc%3ADataFeed=xAx0x2"><atom:title>Tablix1</atom:title></collection></workspace></service>'
pa_list <- pa_string %>% read_xml() %>% as_list()
documentView.js
//gets the selected item the user clicks and deletes it and updates history
$scope.removeFavorite = function(item) {
var items = $scope.recent[item.type];
item = items.splice(items.indexOf(item), 1)[0];
$rootScope.$on('deleteRecent', function(data) {
historyManager.remove(data);
});
historyManager.remove(item).then(loadHistoryItems, loadHistoryItems);
};
答案 0 :(得分:0)
鉴于您的rootScope注射很好,您的问题部分就是这个:
$scope.removeFavorite = function(item) {
var items = $scope.recent[item.type];
item = items.splice(items.indexOf(item), 1)[0];
$rootScope.$on('deleteRecent', function(data) {
historyManager.remove(data);
});
historyManager.remove(item).then(loadHistoryItems, loadHistoryItems);
};
首先,如果你使用$ rootScope进行广播,可以在任何$ scope上接收消息,除此之外,你不要将它包装到$ scope的函数中,第一个参数是event。
所以正确的代码看起来像这样:
$scope.$on('deleteRecent', function(event, data) {
historyManager.remove(data);
});
$scope.removeFavorite = function(item) {
var items = $scope.recent[item.type];
item = items.splice(items.indexOf(item), 1)[0];
historyManager.remove(item).then(loadHistoryItems, loadHistoryItems);
};