【问题标题】:How do I select "this" in angular?如何在角度中选择“this”?
【发布时间】:2015-08-18 15:57:35
【问题描述】:

我有 5 个按钮使用相同的 ng-click 功能。基本上每个按钮的操作类似于选项卡式导航,您单击其中一个按钮,它会将您带到该选项卡的窗格。这些按钮中的每一个都可以重复,并位于模板中。选项卡窗格也都在模板中,但在用户单击其中一个按钮并创建页面之前,它们并不是全部处于活动状态。所以基本上有多个点击函数嵌套在点击函数中,根据用户激活的内容执行不同的操作。

在 jQuery 中,我可以只使用“this”并选择被点击的对象,然后轻松地对该对象进行所有操作;但是,似乎没有办法仅使用角度来做到这一点。目前,当您单击其中一个按钮时,它对所有按钮执行相同的操作。我想我可以创建 5 个单独的函数,但出于可扩展性的原因,我不想这样做。

总结一下:

  • 有没有办法在 Angular 中选择“this”?
  • 我想要一个只使用 Angular 而没有 jQuery 的解决方案
  • 有没有一种有效的方法来处理点击函数中的点击函数?

    <nav class="block--menu">
    <section class="content--menu" ng-controller="ActiveCtrl">
        <div class="menu" >
            <button  class="menu__item" ng-click="showConfirm()"></button>
            <button  class="menu__item" ng-click="showConfirm()"></button>
            <button  class="menu__item" ng-click="showConfirm()"></button>
            <button  class="menu__item" ng-click="showConfirm()"></button>
            <button  class="menu__item" ng-click="showConfirm()"></button>
        </div>
    </section>
    

【问题讨论】:

  • 请添加一些代码来显示您尝试过的操作
  • I'd like a solution that is just using Angular and no jQuery 没有人会为你做你的工作。向我们展示您的进度,以便我们为您提供帮助。
  • 如果您经常需要访问控制器代码中的元素,则说明您编写的角度不正确。您应该考虑在元素已经建立的地方编写一个指令,这将为您提供您可能需要的任何东西。
  • 已添加示例。当我最初发布时,我很难让它显示出来。我不指望任何人为我写它,但我也不能写我不知道该怎么做的东西。
  • @jmur 你还没有表明你实际上正在努力完成!你以什么方式操纵什么元素?

标签: javascript angularjs this


【解决方案1】:

您可以在角度事件check the documentation 中使用$event 访问jQuery 事件对象以获取详细信息,但如果您将其发送到控制器,则很可能意味着您没有在angular way 中执行此操作。

用法是

<button  class="menu__item" ng-click="showConfirm($event)"></button>

在控制器中

$scope.showConfirm = function($event){
    //$event.target should be your link
};

【讨论】:

  • 这不是答案。
  • 好...但是this 实际上不是$event - this 是作用域对象,即showConfirm(this) 将作用域对象发送给函数-因此该语句不正确跨度>
  • OP 的意思是 jquery 事件中的 this 而不是 angular 中的 this。 "在 jQuery 中,我可以只使用 "this" 并选择被点击的对象"
  • 也许...我建议改写以避免混淆
  • @NewDev 现在怎么样?
【解决方案2】:

您应该停止以 jQuery 方式思考,不要尝试直接操作 DOM。在您的控制器中,您应该只操作数据,然后将其反映在视图中。当您考虑 Angular 方式时,您的代码通常如下所示:

HTML

<section ng-controller="ActiveCtrl as ctrl">
    <div class="menu" >
        <button ng-repeat="button in ctrl.buttons track by $index"
                ng-click="ctrl.showConfirm(button)"
                ng-class="{'menu__item_active':button.active, 'menu__item':true}"
        >{{button.name}}</button>
    </div>
</section>

JavaScript

angular.module('app',[]).
  controller('ActiveCtrl', ['$window', function($window) {
    this.buttons = [{
      name: 'First'
    }, {
      name: 'Second'
    }, {
      name: 'Third'
    }];
    this.showConfirm = function(button) {
      button.active = !button.active;
      $window.alert(button.name);
    }
  }]);

Plunker

http://plnkr.co/edit/Dg10cXqFxEKgEt7jWQ7Z?p=preview

【讨论】:

  • 这更符合我的想法。这绝对给了我足够的开始。谢谢!
猜你喜欢
  • 2019-08-08
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 2020-10-06
  • 2019-08-28
  • 1970-01-01
  • 2017-06-03
  • 2011-01-28
相关资源
最近更新 更多