Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS指令和jQuery DOM事件绑定_Javascript_Jquery_Angularjs - Fatal编程技术网

Javascript AngularJS指令和jQuery DOM事件绑定

Javascript AngularJS指令和jQuery DOM事件绑定,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我已经创建了一个指令,但我不太确定像element.bind(“click”,function(){})这样的绑定。每个指令的link函数都会被多次调用,每次调用都会产生一个重复的绑定。实现这一点的最佳方式是什么(即使单击绑定也可以作为属性使用) 每次我将ng视图更改为不同的模板时,globalCounter变量(以及click绑定?)都会增加 也许元素被破坏了,绑定也被破坏了,我不确定,也许这就是我的答案。我想你可以设置一个限制配置选项 首先,我们要设置restrict config选项。限制

我已经创建了一个指令,但我不太确定像
element.bind(“click”,function(){})
这样的绑定。每个指令的link函数都会被多次调用,每次调用都会产生一个重复的绑定。实现这一点的最佳方式是什么(即使单击绑定也可以作为属性使用)

每次我将ng视图更改为不同的模板时,globalCounter变量(以及click绑定?)都会增加


也许元素被破坏了,绑定也被破坏了,我不确定,也许这就是我的答案。

我想你可以设置一个限制配置选项

首先,我们要设置restrict config选项。限制选项 用于指定如何在页面上调用指令

正如我们之前看到的,有四种不同的方式来调用指令, 因此,有四个有效的限制选项:

'A' - <span ng-sparkline></span>
'E' - <ng-sparkline></ng-sparkline>
'C' - <span class="ng-sparkline"></span>
'M' - <!-- directive: ng-sparkline -->
'A'-
‘E’-
‘C’-
“M”——

您没有在单击事件中放置计数器。另外,对于具有该指令的元素,不需要jQuery选择器

app.directive("myDirective", function()
{
    return {
       link: function(scope, element, attrs) {
          element.bind("click", function () {
             // Click event here
          });
       }
    }
});

你的假设并不完全正确。每个指令声明调用一次指令链接函数。因此,click所附着的元素是不同的。因此,每个功能都作用于不同的控件

您仍然可以执行基于css选择器的单击操作绑定,但是应该在父级上定义该指令


此外,当视图更改时,DOM将被销毁,因此旧的绑定将被删除。

我写了一个小例子来说明这个问题
并在这里修复一些与范围有关的问题

请在演示后贴上小提琴或弹琴,您已经试过了,但仍然存在相同的问题。link函数被称为multible time。每次对元素进行新绑定时……如何将其绑定到元素?您可以显示包含该指令的HTML代码段吗?只需保留此代码,以使此示例更简单。
app.directive("myDirective", function()
{
    return {
       link: function(scope, element, attrs) {
          element.bind("click", function () {
             // Click event here
          });
       }
    }
});