我需要通过控件内部的ng-click通过jQuery获取DOM对象。
HTML
<ul>
<li ng-repeat="data in list">
<span ng-click="editMode(this, data.id)">edit</span>
</li>
</ul>
控制器
$scope.editMode = function(obj, id) {
$(obj).hide(); //do not use jQuery hide() in angular! I's just a test!
}
变量 obj 有一个元素,但我无法使用它。 如果我尝试 $(obj).hide(); 没有任何反应。
编辑:这不是在Angular中隐藏元素的正确方法!它只是用作例子!使用ng-hide隐藏元素。
答案 0 :(得分:4)
就像我在评论中所说,你应该有一个支持数据模型,并在你的角度html中声明反应。
这是小提琴的例子:
<li ng-repeat="data in list">
<span ng-click="editMode(data)" ng-hide="data.isInEditMode">edit</span>
</li>
function DataCtrl($scope) {
$scope.list = [{}, {}, {}];
$scope.editMode = function(obj) {
obj.isInEditMode = true;
};
};
答案 1 :(得分:3)
在您的示例中,this
引用当前的角度$scope
实例,而不是元素。获取元素的最简单方法是传递事件对象:
<span ng-click="editMode($event, data.id)">edit</span>
然后在处理程序中,您可以访问目标元素:
$scope.editMode = function(e, id) {
$(e.target).hide();
};
注意:对于Angular来说,这不是一个好习惯。假设您的editMode
函数除了隐藏元素之外什么都不做,您可以使用ng-hide
或ng-show
指令来实现它,如您对问题的评论所述。