Angularjs 刷新页面注释的一部分

Angularjs 刷新页面注释的一部分,angularjs,ajax,ui-calendar,Angularjs,Ajax,Ui Calendar,我有一个网页和两个控制器。一个控制器用于从数据库获取数据并更新ui日历事件,另一个控制器用于向数据库提交表单数据。我想刷新我的卡(其中使用了第一个控制器)使用新插入的值,即一旦将值添加到db,视图应使用新的表数据进行更新,并显示在ui-calendar上。如何使用angular和js执行此操作。这些是我的控制器 app.controller('myNgController',['$scope','$http','$rootScope','uiCalendarConfig',函数($scope,

我有一个网页和两个控制器。一个控制器用于从数据库获取数据并更新ui日历事件,另一个控制器用于向数据库提交表单数据。我想刷新我的卡(其中使用了第一个控制器)使用新插入的值,即一旦将值添加到db,视图应使用新的表数据进行更新,并显示在ui-calendar上。如何使用angular和js执行此操作。这些是我的控制器

app.controller('myNgController',['$scope','$http','$rootScope','uiCalendarConfig',函数($scope,$http,$rootScope,uiCalendarConfig){
$calendar=$(“[ui calendar]”);
变量日期=新日期(),
d=日期。getDate(),
m=date.getMonth(),
y=日期。getFullYear();
$scope.changeView=函数(视图){
$calendar.fullCalendar('changeView',view);
};
/*配置对象*/
$scope.uiConfig={
日历:{
朗:“达”,
身高:450,
可编辑:false,
是的,
标题:{
左:“月基本周基本日”,
中心:'标题',
右图:“今天上一个,下一个”
},
eventClick:函数(日期、jsEvent、视图){
$scope.alertMessage=(单击了date.title+);
警报(“单击”+日期标题);
},
选择:功能(开始、结束、全天)
{
var obj={};
obj.startAt=start.toDate();
obj.startAt=新日期(obj.startAt.toutString();
obj.startAt=obj.startAt.split(“”).slice(0,4).join(“”);
obj.endAt=end.toDate();
obj.endAt=新日期(obj.endAt.toutString();
obj.endAt=obj.endAt.split(“”).slice(0,4).join(“”);
$rootScope.selectionDate=obj;
$(“#modal1”).openModal();
日历。完整日历(“取消选择”);
},
eventRender:$scope.eventRender
}
};
$scope.events=[];
$scope.eventSources=[$scope.events];
$http.get(“休息/离开/列表”{
是的,
参数:{}
}).then(功能(数据){
$scope.events.slice(0,$scope.events.length);
角度.forEach(数据.数据,函数(值){
console.log(value.title);
$scope.events.push({
标题:value.title,
description:value.description,
开始:value.startAt,
结束:value.endAt,
全天:value.isFull,
棍子:是的
});
});
});
app.controller(“MyAddController”,函数($scope、$http、$rootScope){
$scope.test={};
$scope.add=函数(){
$scope.test1=$rootScope.selectionDate;
var jsonData=JSON.stringify($.extend({},$scope.test,$scope.test1));
console.log(“+jsonData”);
//console.log(“------------->”+JSON.stringify($jsonData));
$http({
url:“休息/离开/创建”,
方法:“张贴”,
资料来源:jsonData,
标题:{'Content-Type':'application/json'}
}).success(函数(数据、状态、标题、配置){
如果(数据){
$scope.data=数据;
警惕(“成功”);
}
}).error(函数(数据、状态、标题、配置){
警报(“错误”);
})
}

});
在这种情况下,我建议使用
$broadcast
。更新数据库后(在
.success
回调函数中),在
$rootScope
上广播一个事件。然后,您可以在其他控制器中收听此事件,并在收到事件后执行任何需要执行的操作

添加到MyAddController:

$rootScope.$broadcast('MyAddController.success');
const removeRootScopeListener = $rootScope.$on('MyAddController.success', () => {
    // Do whatever you need to do here
});
添加到您的
MyDbController

$rootScope.$broadcast('MyAddController.success');
const removeRootScopeListener = $rootScope.$on('MyAddController.success', () => {
    // Do whatever you need to do here
});
不要忘记,当本地
$scope
被销毁时,
$rootScope
上的事件侦听器不会自动清理。要防止内存泄漏,请手动删除事件侦听器

要删除事件侦听器,请执行以下操作:

$scope.$on('$destroy', () => {
    removeRootScopeListener();
});

非常抱歉造成混淆,用更新的控制器编辑了我的问题。我不明白在$rootScope内调用哪个函数。$on('MyAddController.success'以便更新我的视图。请提供帮助。感谢您调用从数据库获取数据并将数据保存在
$scope
上的函数。我不确定是哪一个,因为这样做的是
MyDbController
的一部分,我在您的代码中找不到。是的,很抱歉。我添加了该控制器很快。这是我的实际控制器。此控制器用于显示和更新ui-calendar的事件。但我不知道在$rootScope.$on('MyAddController.success'…..)中调用此控制器的哪个函数。有什么线索吗?我不确定,您的代码非常混乱。我认为以
$http.get开头的块(“rest/leave/list”…
。这似乎是从服务器获取数据并将其公开给视图的一个。不..无论我尝试了什么,更改都不会反映在日历中