我有一個角度應用程序,它的行爲如下:跟蹤元件綁定和事件狀態在angularjs
- 上
mousedown
的請求得到發送,返回表示所述更新的對象JSON數據。 - 雖然事件仍然處於活動狀態,但元素會使用接收的數據重新呈現。
- on
mouseup
再次發送請求,收到JSON並且元素再次呈現。var PRESS_EVENT = 'mousedown'; var RELEASE_EVENT = 'mouseup'; app.directive('ngPress', function() { return { restrict: 'A', link: function($scope, $element, $attributes) { $element.bind(PRESS_EVENT, function(event) { $scope.$eval($attributes.ngPress); }); } }; }); app.directive('ngRelease', function() { return { restrict: 'A', link: function($scope, $element, $attributes) { $element.bind(RELEASE_EVENT, function(event) { $scope.$eval($attributes.ngRelease); }); } }; });
模板的代碼如下所示:
我通過這樣的指令來執行這個
<div data-ng-press="press(uid)"
data-ng-release="release(uid)">
...
</div>
雖然這部作品在瀏覽器的罰款正確啓用mousedown
和mouseup
,這無法工作的帶有觸摸屏的設備,其中touchstart
和touchend
是這些事件的替代品(差不多,請繼續閱讀)。
如此處所述 - http://lists.w3.org/Archives/Public/public-webevents/2012OctDec/0023.html - touchend
被承諾會在與它相同的元素上被觸發 - 實際上是由於重新呈現而被刪除的元素,並且它也不會冒泡DOM,因爲沒有父元素不再。
現在,我尋找被刪除的元素的方式保持跟蹤 - 無論是除非touchend發生保持它也許財產以後實際事件狀態發燒友轉移到被稱爲新的元素。
現在我想在ngPress
註冊一個破壞聽衆做的工作:
var PRESS_EVENT = 'touchstart';
var RELEASE_EVENT = 'touchend';
app.directive('ngPress', function() {
return {
restrict: 'A',
link: function($scope, $element, $attributes) {
$element.bind(PRESS_EVENT, function(event) {
$scope.$eval($attributes.ngPress);
});
$scope.$on('$destroy', function() {
// do my fancy magic here
});
}
};
});
...
如何訪問供以後重複使用相關的事件處理程序和/或事件狀態重新渲染之後,或者我怎麼養元素按預期收聽touchend
?
-r
我如何可以模擬觸摸事件拖延? –
您是否考慮隱藏它,而不是將其刪除? –
@MWay是的,我做到了。在這種情況下,在執行角度範圍的重新渲染過程中,它將被刪除。在我的最後一句話中,這也意味着「我如何讓元素如預期那樣聆聽touchend」。我只是不知道什麼是正確的鉤角實現這一目標? – rnix