在angularjs中获取$ this

Bhu*_*hal 18 javascript jquery angularjs

这是我的问题.

HTML结构:

<tr><td><a ng-click=aClick()>Click Me</a></td></tr>
Run Code Online (Sandbox Code Playgroud)

我不能拥有与和相关的任何id/class

我需要的是点击"点击我",<tr>隐藏起来.我需要一个jQuery解决方案.一些我无法使用的方法$(this).

功能:

$scope.aClick = function() {
   $(this).parent().parent().css('display','block');
};
Run Code Online (Sandbox Code Playgroud)

但这句话给了我一个错误.

Aru*_*hny 35

注意:我不建议在控制器中使用dom操作,您可以编写指令来执行此操作.也就是说你可以使用它$event来获取事件对象,从中可以获取事件目标并将其与jquery一起使用.

<tr><td><a ng-click="aClick($event)">Click Me</a></td></tr>
Run Code Online (Sandbox Code Playgroud)

  $scope.aClick = function(event) {
     $(event.target).parent().parent().css('display','none');
  };
Run Code Online (Sandbox Code Playgroud)

演示:Plunker

更新
更合适的角度解决方案是使用ng-hide

<tr ng-hide="hideRow"><td><a ng-click="hideRow = true">Click Me</a></td></tr>
Run Code Online (Sandbox Code Playgroud)

演示:Plunker

使用ng-repeat 更新了演示


Nil*_*lsH 7

由于你使用角度,你应该很少需要做实际的dom操作.相反,请查看应该为您执行此操作的ng-hide/ng-show指令.

Angular文档中的一个示例:

<body>
    Click me: <input type="checkbox" ng-model="checked"><br/>
    Show: <span ng-show="checked">I show up when you checkbox is checked?</span> <br/>
    Hide: <span ng-hide="checked">I hide when you checkbox is checked?</span>
</body>
Run Code Online (Sandbox Code Playgroud)

编辑

如果表达式中的变量异步更新,则可以强制更新 $scope.$apply

  • 然后你应该可以使用[`$ sope.$ apply`]强制更新(http://docs.angularjs.org/api/ng.$ro​​otScope.Scope) (4认同)

Min*_*hev 6

你可以用这个:

JavaScript的

function TestCtrl($scope) {
    $scope.clickMe = function ($event) {
        $($event.target).parent().parent().css('display','none');
    };
}
Run Code Online (Sandbox Code Playgroud)

HTML

<div ng-app>
    <div ng-controller="TestCtrl">
        <a ng-click="clickMe($event)">Click me</a>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

现场演示

  • 绝对有效....但Arun之前发布了答案,这对我需要的更准确......所以只有+1. (2认同)