2014-05-11 184 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, 我必須找到一個用於角度錶帶的解決方案 –

相關問題