当前位置: 首页 > 面试题库 >

角ng-click事件委托

崔宜修
2023-03-14
问题内容

因此,如果我有一个带有100 li的ul,则每个li都应该有ng-
clicks或是否有办法将事件绑定到ul并将其委派给li的jquery的工作方式?这会好还是坏?我们有100个事件,还是最后只有一个事件?


问题答案:

似乎angular并没有使用中继器进行事件委派。有人在github上发布了一个关于它的问题。争论在于它是否实际上会带来更好的性能。

可能有解决方法,但需要jQuery。它包括创建要在父元素上使用的特殊指令,并在其dom节点上注册侦听器。

这是一个示例,该示例传递了单击子节点时要调用的函数名称,还传递了选择器以帮助识别要收听的子节点。由于angular的jquery实现仅提供给我们bind方法-
仅限于将事件侦听器注册到实际元素-我们需要加载jQuery才能访问onor delegate方法。

的HTML

<ul click-children='fun' selector='li'>
    <li ng-repeat="s in ss" data-index="{{$index}}">{{s}}</li>
</ul>

定义的函数在控制器中定义,并且期望传递给索引

$scope.fun = function(index){
    console.log('hi from controller', index, $scope.ss[index]);      
};

该指令用于$parse将表达式转换为将从事件侦听器调用的函数。

app.directive('clickChildren', function($parse){
  return {
    restrict: 'A',
    link: function(scope, element, attrs){       
      var selector = attrs.selector;
      var fun = $parse(attrs.clickChildren);   
      element.on('click', selector, function(e){       
        // no need to create a jQuery object to get the attribute 
        var idx = e.target.getAttribute('data-index');        
        fun(scope)(idx);        
      });
    }
  };
});

柱塞:http
://plnkr.co/edit/yWCLvRSLCeshuw4j58JV?p=preview

注意:可以使用isolate作用域将函数委派给指令{fun: '&'},这值得一看,但这会增加复杂性。



 类似资料:
  • 我在angular指令中有这段代码,我发现$watch的行为有点令人困惑。在“ng click”中调用updateSelect: 当我点击按钮(触发更新选择)并观看控制台时,我会看到“更新”,然后是“观看”。函数内部发生的第一件事是选择Ctrl。设置了activeList,所以我希望看到“watch”和“update”。 不应该在阵列更改后立即监视触发器吗?

  • 问题内容: 我想做一些我不知道的事 JS 我想将ng-click事件放在ng- grid中的一行上,我已经了解了一下这个想法,但是我真的不知道是否有可能,如果可以,那是否是正确的方法去做。在这段代码中,这对我来说似乎很好,该应用程序不会启动警报,是否有任何建议或想法? 这是矮人http://plnkr.co/edit/U6wdWTAV30HRhJk8xFPA?p=preview 问题答案: 这些定

  • 问题内容: 我有一些要从json文件加载的html数据。 我通过在应用程序中使用ngSanitize并使用ng-bind-html来显示此html数据。 现在我想从标准转换json blob中的任何链接 至: 。 所以我在json文件上做了一些regExp来转换链接,但是出于某种原因,但是ng-bind-html过滤掉了ng- click的输出,我不知道为什么。是否应该这样做,如果可以,可以禁用此

  • 问题内容: 我在ng-repeat中有以下代码: 如何使按钮处于禁用状态? 或者有没有一种方法可以用Javascript来完成,因此如下所示: 问题答案: 除指令外,在任何地方都不能使用DOM(包括属性检查)进行操作。您可以在范围内添加一些值,该值指示是否应禁用链接。 但是另一个问题是ngDisabled除了表单控件之外不能在其他任何东西上使用,因此您不能将其与一起使用,但可以将其与一起使用并将其

  • 捕获和冒泡允许我们实现一种被称为 事件委托 的强大的事件处理模式。 这个想法是,如果我们有许多以类似方式处理的元素,那么就不必为每个元素分配一个处理程序 —— 而是将单个处理程序放在它们的共同祖先上。 在处理程序中,我们获取 event.target 以查看事件实际发生的位置并进行处理。 让我们看一个示例 —— 反映中国古代哲学的 八卦图。 如下所示:在新窗口中打开 在沙箱中打开 其 HTML 如

  • 该事件发生在用户单击CommandBarButton 对象时。 Private Sub CommandBarButton_Click (ByVal Ctrl As CommandBarButton, ByVal CancelDefault As Boolean) Click 事件的语法中包含两个参数,下表中列出了对这两个参数的说明。参数说明CtrlCommandBarButton 类型,必需。指示