在控制器中获取对象

时间:2013-06-26 13:59:53

标签: javascript jquery angularjs angularjs-ng-click

我需要通过控件内部的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隐藏元素。

2 个答案:

答案 0 :(得分:4)

就像我在评论中所说,你应该有一个支持数据模型,并在你的角度html中声明反应。

这是小提琴的例子:

http://jsfiddle.net/mVCkY/

<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-hideng-show指令来实现它,如您对问题的评论所述。