我正在使用角带日期选择器,我想在日期选择器打开和关闭时执行一些我自己的逻辑。
如何识别控制器中的这些事件并绑定到它们?
不仅是 datepicker 事件,还有任何 angular straps 事件。
我想做的一个例子:
我正在使用角带日期选择器,我想在日期选择器打开和关闭时执行一些我自己的逻辑。
如何识别控制器中的这些事件并绑定到它们?
不仅是 datepicker 事件,还有任何 angular straps 事件。
我想做的一个例子:
假设您想在控制器中获取选定的日期并对其进行处理:
将此添加到您的控制器:
$rootScope.$watch('datepickerDateSelected', function(date){
// do whatever you want with the date parameter here
});
并修改 datepicker 指令$scope.select方法,如下所示:
scope.$select = function (date) {
$rootScope.datepickerDateSelected = date; // ADD THIS
$datepicker.select(date);
};
[ 更新 ]
使用 $broadcast/$on。像这样修改指令($datepicker.show 和 $datepicker.hide 方法):
$datepicker.show = function(){
...
$rootScope.$broadcast('opening'); // ADD THIS
...
}
$datepicker.hide= function(blur){
...
$rootScope.$broadcast('closing'); // ADD THIS
...
}
在你的控制器中,添加这个(你不需要 $watch 任何东西):
$rootScope.$on('opening', function(event, data) { console.log("it's opening!"); });
$rootScope.$on('closing', function(event, data) { console.log("it's closing!"); });
它适用于我的情况,但您可能想检查一下:Working with $scope.$emit and $scope.$on (参见 zbynour 的回答)
如果您不想使用 $broadcast/$on (请参阅注释),只需像第一个示例中那样使用 $watch 即可。
我检查了 AngularStrap 的日期选择器的代码。他们提供了一项$datepicker
服务,我认为可以对其进行装饰以实现您想要的效果,但这应该在config
您的应用程序阶段完成,并且该服务需要初始化一个 DOM 元素。因此,我认为这种解决方案是不可行的。
无论如何,我查看了Angular-UI 的 datepicker,它提供了属性来指定用于open
和close
事件的函数。使用它们并在那里发出你的事件会容易得多。