angularjs找不到jQuery的“this”?

时间:2016-05-30 09:59:48

标签: jquery angularjs events angularjs-ng-click

例如,我有两个按钮

  <button class="item" ng-click="clickFun(this)">ngClick</button>
  <button class="item" onClick="clickFun(this)">jQueryClick</button>

我试图访问两个按钮,它在jQuery Click中工作,但是ngClick失败了。我从ngClick获得了'(空)。

js code:

var oneApp = angular.module('oneApp', [])
.controller('oneCtrl', function($scope) {
  console.log('running');
  $scope.clickFun = function(obj){
     console.log($(obj).text());
    //console.log($(obj).next('.next'));
    //console.log($(obj).next('.next').text());
  }
});

function clickFun(obj){
  console.log($(obj).text());
}

以下是我的演示:http://codepen.io/dotku/pen/VjwEvR

4 个答案:

答案 0 :(得分:3)

您应该在调用$event函数时传递ng-click对象,该函数基本上会将当前事件对象传递给clickFun&amp;然后执行event.target,这将指示控制器内的当前上下文(this)。

<强>标记

<button class="item" ng-click="clickFun($event)">ngClick</button>

<强>代码

$scope.clickFun = function(event){
   console.log($(event.target).text());
}

Working CodePen

  

注意:在Angular

中使用控制器内的DOM不正确

答案 1 :(得分:0)

将DOM元素传递给回调函数不是Angular方式。这是jQuery方式。

在Angular中,不需要传递DOM元素,因为Angular方式不是做DOM操作,而是模型操作;并且视图可以绑定到模型。

因此,在Angular中,您将传递对模型属性的引用,而不是DOM元素:

WebFrameLoadDelegate Protocol

将$ scope.somethingToClickOn传递给点击处理程序,通过单击按钮识别要传递/操作的字段。

答案 2 :(得分:0)

我认为this在html中没有任何意义。您可以在功能中传递$event,然后使用$($event.current).text()代替:

<button class="item" ng-click="clickFun($event)">ngClick</button>

并在JS写道:

 $scope.clickFun = function(event){
     console.log($(event.target).text());
  }

查看更新后的codepen

答案 3 :(得分:0)

您可以通过$ event

来实现这一目标
 <button class="item"  ng-click='functionname($event)'>

的问候,
Selvam.M