2014-05-11 185 views
1

我使用角度皮带datepicker,并且当datepicker打开和关闭时我想执行一些我自己的逻辑。当它们被触发时绑定到角度皮带datepicker事件

如何识别我的控制器中的这些事件并绑定到它们?

而不仅仅是日期选择器事件,但任何角度事件。

什么,我想要做的一个例子:

http://plnkr.co/edit/Uy1Lz6I0NWSACV4kyljk?p=catalogue

+0

你可以为你提供jsfiddle/plunkr,让其他用户可以建立它并告诉你如何完成你想要的任务 –

+0

ng-change怎么样? –

回答

2

比方说,你想获得选定的日期在您的控制器,并用它做什么:

添加到您的控制器:

$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的答案)

如果你不想使用$广播/ $上(见评论),只需使用$手表像在第一个例子中。

+0

是的,这是一个解决方法。现在我想到了,您还可以'发射'一个'datePickerDateSelected'事件,并将'date'作为一个值,并在任何想要使用选定日期的地方使用'$ on'来监听该事件。这样你就可以避免在''rootScope''上创建一个属性。无论如何,差异是非常小的。 – link

+0

除了OP想要对'open'和'close'事件作出反应,而不是'dateSelected'事件... – link

+0

Ooops。你绝对是对的,@link。不过,我只是想举一个例子来说明如何观察一个变量并在指令中改变它。无论如何,该指令确实有$ datepicker.show和$ datepicker.hide方法 - 虽然它们都是在用户打开/关闭日历时执行的,但我相信可以用它做些事情。 PS:我也喜欢$ emit事件的可能性,尽管它似乎有一些警告:http://stackoverflow.com/questions/21402756/angularjs-emit-only-works-within-its-current-scope – Edd

0

我查AngularStrap的日期选择器的代码。他们提供了一个$datepicker服务,我认为这个服务可以用来实现你想要的功能,但这应该在你的应用的config阶段完成,并且服务需要初始化一个DOM元素。因此,我认为这个解决方案是不可行的。

无论如何,我看着Angular-UI's datepicker,它提供了归因于指定功能用于openclose事件。使用它们并在那里发射你的事件会容易得多。

+0

谢谢,但我无法找到“归因于指定用于打开和关闭事件的函数” 您能否给我一个如何做的例子? –

+0

请看他们提供的[plunkr](http://plnkr.co/edit/?p=preview)作为例子,特别是Popup datepicker。在第25行,它们将一个按钮绑定到在控制器范围内声明的“open”函数。该函数改变'打开的'变量的值,该变量控制日期选择器是否打开/关闭。你可以看这个变量来执行你的定制逻辑。 – link

+0

我刚刚意识到你在谈论Angular UI, 我必须找到一个用于角度表带的解决方案 –

相关问题