Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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-指令不适用于动态添加的类_Javascript_Jquery_Angularjs - Fatal编程技术网

Javascript angularjs-指令不适用于动态添加的类

Javascript angularjs-指令不适用于动态添加的类,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,-我有一个按钮,可以在body元素上切换类 我已经创建了一个指令,当toggled类被分配给当前不工作的body元素时,它会打开一个警报 但是,如果我删除body元素上的toggled类,则警报确实有效 我能告诉我为什么会这样吗 当我创建一个引用到动态添加类的元素的指令时,它为什么工作 提前感谢。首先,要动态注册单击处理程序,必须使用不同的jQuery语法。在上: 而不是这个 $('toggled > .alert').click(function() { alert("Yes

-我有一个按钮,可以在body元素上切换类

我已经创建了一个指令,当
toggled
类被分配给当前不工作的body元素时,它会打开一个警报

但是,如果我删除body元素上的
toggled
类,则警报确实有效

我能告诉我为什么会这样吗

当我创建一个引用到动态添加类的元素的指令时,它为什么工作


提前感谢。

首先,要动态注册单击处理程序,必须使用不同的
jQuery语法。在
上:

而不是这个

  $('toggled > .alert').click(function() {
    alert("Yes!");
  })
用这个

  $(document).on('click', 'toggled > .alert', function() {
    alert("Yes!");
  })
此外,若要为元素显示单独的对话框(在其中注册了指令),则必须在元素本身上注册click handler,并检查它是否符合选择器:

link: function(scope, element) {
  element.on('click', function() {
    if (jQuery(this).is('.toggled > .alert')) {
      alert("Yes!");
    }
  });
}

在指令内部,触发警报所需做的只是

app.directive('openAlert', function() {

  return {
    restrict: 'A',
    link: function(scope, element) {
      $(element).click(function() {
        if ($(element).parent().hasClass('toggled')) alert("Yes!");
      })
    }
  }

})

演示如下:

您可以不用jQuery解决这个问题。查看下面的解决方案

  • 无需在
    ng init
    指令上设置
    toggle
    ,在控制器中进行设置
  • 在锚定标记上使用
    ng单击
    指令
  • 在指令中声明一个
    alert
    函数,并在
    ng单击时调用它,这样就不需要jQUery了
  • 在触发警报之前,在
    警报
    功能中检查
    范围切换
    是否为
  • HTML

    <body ng-controller="MainCtrl" ng-class="{toggled: toggle}">
        <p>Hello {{name}}!</p>
        <button ng-click="toggle = !toggle">Toggle Class</button>
        <a href="#" ng-click="alert()" open-alert>Open the alert box!</a>
    </body>
    

    为了避免此问题被关闭为“仅链接”,我建议您在问题中加入代码的相关部分。(假设与plunker的链接已断开,尝试阅读该问题)它一直有效。我希望它只在主体的类
    被切换时才工作。你检查了plunk吗?
    
    var app = angular.module('plunker', []);
    
    app.controller('MainCtrl', function ($scope) {
        $scope.name = 'World';
        $scope.toggle = !$scope.toggle;
    });
    
    app.directive('openAlert', function () {
        return {
            restrict: 'A',
            link: function (scope, element) {
                scope.alert = function () {
                    if (!!scope.toggle) {
                        alert('Yes!');
                    }
                };
            }
        }
    });