我使用角度皮帶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怎麼樣? –