如何通过"这个"用ng-click?

时间:2015-03-29 16:38:42

标签: javascript angularjs

我想我以前做过这件事,但我忘记了怎么做。这就是我想要完成的事情:

在html中,我有这个设置:

<md-card ng-repeat="card in cards" data-link="{{card.link}}" ng-click="showCardDes(this)">

在我的Angular脚本中,我进行了设置:

  $scope.showCardDes = function(e) {
    var tempUrl = $(e).attr('data-link');
    $mdDialog.show({
      controller: DialogController,
      templateUrl: tempUrl,
    });
  };

我也试过html:

<md-card ng-repeat="card in cards" ng-click="showCardDes({{card.link}})">

在我的Angular脚本中:

  $scope.showCardDes = function(url) {
    $mdDialog.show({
      controller: DialogController,
      templateUrl: url,
    });
  };

我记得当我在设置ng-model时涉及到某些内容之前我做过这件事,但我真的无法在线或在我的硬盘中找到文档。 >.<

我忘了提及我也试过了:

<md-card ng-repeat="card in cards" class="noselect hietim {{card.size}}" data-link="{{card.link}}" ng-click="showCardDes($event)" md-ink-ripple>

在我使用的Angular Script中:

  $scope.showCardDes = function(event) {
    var tempUrl = $(event.target).attr('data-link');
    $mdDialog.show({
      controller: DialogController,
      templateUrl: tempUrl,
    });
  };

这将返回:

未捕获的TypeError:无法读取未定义的属性'hasAttribute'

3 个答案:

答案 0 :(得分:9)

如果您传入ng-click="showCardDes($event)",则可以访问$event对象中的元素。

所以在你的javascript中它看起来像这样:

 $scope.showCardDes = function($event) {
    var btn = $event.currentTarget;
    var tempUrl = $(btn).attr('data-link');
    $mdDialog.show({
      controller: DialogController,
      templateUrl: tempUrl,
    });
  };

答案 1 :(得分:9)

正如其他人所说,你可以为此使用$ event,但在你的情况下,这不是一种有角度的方式。您应该将模型作为参数传递并读取其属性;

<md-card ng-repeat="card in cards" ng-click="showCardDes(card)">

并在您的控制器中;

$scope.showCardDes = function(card) {
  var tempUrl = card.link;
  $mdDialog.show({
    controller: DialogController,
    templateUrl: tempUrl,
  });
};

答案 2 :(得分:1)

您的处理程序的ngClick指令passes a named $event property,您可以使用它来访问&#34;这个&#34; (又称事件目标)。

<md-card ng-click="showCardDes($event)" ...>

然后您的控制器可能如下所示:

$scope.showCardDes = function(event) {
  var tempUrl = $(event.target).attr('data-link');
  $mdDialog.show({
    controller: DialogController,
    templateUrl: tempUrl,
  });
};