是否可以仅使用AngularJS执行$("#container").trigger("click");
之类的操作?如果trigger
无法实现,是否有其他方法可以管理此行为?
我有一个基本示例,可以在按钮上单击创建一个框。创建的框是可拖动的。现在,用户必须单击按钮(以创建框)并再次单击以拖动框。我希望用户只需单击一次:创建框,然后触发框的拖动事件,这样用户就不必再次单击。
var app = angular.module("app", []);
// This directive is attached to the button and makes it create a box every time the is a 'mousedown' event
app.directive("boxCreator", function($document, $compile) {
return {
restrict: 'A',
link: function($scope, $element, $attrs) {
$element.bind("mousedown", function($event) {
var newNode = $compile('<div class="box" drag></div>')($scope);
newNode.css({
top: $event.pageY - 25 + "px",
left: $event.pageX - 25 + "px"
});
angular.element($document[0].body).append(newNode);
// I'd like to do something like : '$(newNode).trigger("mousedown");'
});
}
}
});
// Makes the binded element draggable
app.directive("drag", function($document) {
return function(scope, element, attr) {
var startX = 0, startY = 0, x = event.pageX - 25, y = event.pageY - 25;
element.css({
position: 'absolute',
cursor: 'pointer'
});
element.on('mousedown', function(event) {
event.preventDefault();
startX = event.pageX - x;
startY = event.pageY - y;
$document.on('mousemove', mousemove);
$document.on('mouseup', mouseup);
});
function mousemove(event) {
y = event.pageY - startY;
x = event.pageX - startX;
element.css({
top: y + 'px',
left: x + 'px'
});
}
function mouseup() {
$document.off('mousemove', mousemove);
$document.off('mouseup', mouseup);
}
};
});
答案 0 :(得分:6)
您要查看的文档是angular.element
,这是angular的JQLite实现。
您可以从中看到有.triggerHandler()
方法。
类似于:
angular.element(newNode).triggerHandler('mousedown');
将触发处理程序。唯一的问题是,这不包括任何事件数据,因此您还必须删除对event.pageY
的依赖。我通过修改这两行粗略地做到了这一点:
startX = (event.pageX - x) || 0;
startY = (event.pageY - y) || 0;
你也可以考虑通过params,但我根本无法工作。
希望这能让你开始。
答案 1 :(得分:1)
您可以使用triggerHandler
并传递自定义事件数据。
element.triggerHandler({
type: 'mousedown',
pageX: 0,
pageY: 0
});