gpt4 book ai didi

angularjs - 如何像在 jQuery 中一样在 AngularJS 中触发事件?

转载 作者:行者123 更新时间:2023-12-04 14:44:31 26 4
gpt4 key购买 nike

是否可以做类似 $("#container").trigger("click"); 的事情?只使用 AngularJS 吗?如果不可能 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);
}
};
});

JSFIDDLE

最佳答案

你想看的文档是 angular.element ,这是 angular 的 JQLite 实现。

从中可以看出,有一个.triggerHandler()方法。

所以像:

angular.element(newNode).triggerHandler('mousedown');

将触发处理程序。唯一的问题是,这不包括任何事件数据,因此您还必须删除对 event.pageY 的依赖。 .我通过修改这两行粗略地做到了这一点:
startX = (event.pageX - x) || 0;
startY = (event.pageY - y) || 0;

你也可以研究传递参数,但我根本无法让它工作。

希望这能让你开始。

Updated fiddle

关于angularjs - 如何像在 jQuery 中一样在 AngularJS 中触发事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25709041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com