我使用角度皮带datepicker,并且当datepicker打开和关闭时我想执行一些我自己的逻辑。当它们被触发时绑定到角度皮带datepicker事件
如何识别我的控制器中的这些事件并绑定到它们?
而不仅仅是日期选择器事件,但任何角度事件。
什么,我想要做的一个例子:
http://plnkr.co/edit/Uy1Lz6I0NWSACV4kyljk?p=catalogue
我使用角度皮带datepicker,并且当datepicker打开和关闭时我想执行一些我自己的逻辑。当它们被触发时绑定到角度皮带datepicker事件
如何识别我的控制器中的这些事件并绑定到它们?
而不仅仅是日期选择器事件,但任何角度事件。
什么,我想要做的一个例子:
http://plnkr.co/edit/Uy1Lz6I0NWSACV4kyljk?p=catalogue
比方说,你想获得选定的日期在您的控制器,并用它做什么:
添加到您的控制器:
$rootScope.$watch('datepickerDateSelected', function(date){
// do whatever you want with the date parameter here
});
并修改日期选择器指令$ scope.select方法,是这样的:
scope.$select = function (date) {
$rootScope.datepickerDateSelected = date; // ADD THIS
$datepicker.select(date);
};
[UPDATE]
使用$ broadcast/$ on。修改指令($ datepicker.show和$ datepicker.hide方法)是这样的:
$datepicker.show = function(){
...
$rootScope.$broadcast('opening'); // ADD THIS
...
}
$datepicker.hide= function(blur){
...
$rootScope.$broadcast('closing'); // ADD THIS
...
}
而在你的控制器,添加这个(你不需要$看任何东西):
$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的答案)
如果你不想使用$广播/ $上(见评论),只需使用$手表像在第一个例子中。
是的,这是一个解决方法。现在我想到了,您还可以'发射'一个'datePickerDateSelected'事件,并将'date'作为一个值,并在任何想要使用选定日期的地方使用'$ on'来监听该事件。这样你就可以避免在''rootScope''上创建一个属性。无论如何,差异是非常小的。 – link
除了OP想要对'open'和'close'事件作出反应,而不是'dateSelected'事件... – link
Ooops。你绝对是对的,@link。不过,我只是想举一个例子来说明如何观察一个变量并在指令中改变它。无论如何,该指令确实有$ datepicker.show和$ datepicker.hide方法 - 虽然它们都是在用户打开/关闭日历时执行的,但我相信可以用它做些事情。 PS:我也喜欢$ emit事件的可能性,尽管它似乎有一些警告:http://stackoverflow.com/questions/21402756/angularjs-emit-only-works-within-its-current-scope – Edd
我查AngularStrap的日期选择器的代码。他们提供了一个$datepicker
服务,我认为这个服务可以用来实现你想要的功能,但这应该在你的应用的config
阶段完成,并且服务需要初始化一个DOM元素。因此,我认为这个解决方案是不可行的。
无论如何,我看着Angular-UI's datepicker,它提供了归因于指定功能用于open
和close
事件。使用它们并在那里发射你的事件会容易得多。
谢谢,但我无法找到“归因于指定用于打开和关闭事件的函数” 您能否给我一个如何做的例子? –
请看他们提供的[plunkr](http://plnkr.co/edit/?p=preview)作为例子,特别是Popup datepicker。在第25行,它们将一个按钮绑定到在控制器范围内声明的“open”函数。该函数改变'打开的'变量的值,该变量控制日期选择器是否打开/关闭。你可以看这个变量来执行你的定制逻辑。 – link
我刚刚意识到你在谈论Angular UI, 我必须找到一个用于角度表带的解决方案 –
你可以为你提供jsfiddle/plunkr,让其他用户可以建立它并告诉你如何完成你想要的任务 –
ng-change怎么样? –