【问题标题】:Angular child ng-click event does not fire after parent ng-click eventAngular 子 ng-click 事件在父 ng-click 事件后不会触发
【发布时间】:2016-05-20 06:37:55
【问题描述】:

我对 Angular 还很陌生,所以我还没有弄清楚它的所有小怪癖。目前我有一个按钮,用 ng-click="open()" 打开一个覆盖。在覆盖层内有另一个按钮可以使用 ng-click="close()" 关闭覆盖层。

就目前而言,如果视图中存在其他事件,则不会触发 ng-click 事件。如果 ng-click="open()" 存在,则 ng-click="close()" 不会触发,反之亦然。

这是我所说的更简单的版本,因为我正在处理的实际应用程序有点繁重:

查看

<button ng-click="open()">Open</button>

<div id="overlay">
   <button ng-click="close()">Close</button>
</div>

控制器

$scope.open = function(){
   //some move.js to open the overlay
}

$scope.close = function(){
   //some move.js to close the overlay
}

叠加不是动态生成的,而是在加载时渲染到页面。

下面是@sz tech 提供的解决方案。不是 $compile 方法。 http://codepen.io/NicholasByDesign/pen/WwqMXa?editors=1010

只是一种旁注,因为我认为这不会有所作为。我在 nodejs 和玉环境中工作。我把它作为普通的 HTML 并省略了包装打开/关闭函数的控制器代码以简化事情。

【问题讨论】:

  • 你能重现简单的演示吗?
  • 覆盖,你指的是打开的模态框?如果是这种情况,那么当显示叠加层时,它后面的控件就会被锁定。
  • @MedetTleukabiluly 我已经用一个简单的演示更新了我的答案。
  • @Dev-One 感谢您的提醒,是的,它是一种模式,在这种情况下,您能否指导我使用典型的 Angular 方法来处理其他人正在做什么来处理关闭事件?跨度>
  • 是否可以在您的代码中使用 ng-modal?创建模态时,我真的觉得这个博客很有趣:weblogs.asp.net/dwahlin/building-an-angularjs-modal-service

标签: javascript angularjs node.js pug mean


【解决方案1】:

问题是您正在更新 (div.innerHTML += "close";) 包含角码 (ng-click="close()") 的 div,并且绑定会消失,请尝试在更新后重新编译 div,它会起作用。试试这段代码:

 var app = angular.module('myApp', []);
   app.controller('appCtrl', function($scope,$compile) {
   var div = document.getElementById('div');

   $scope.open = function(){
     div.innerHTML += "open";
         $compile(div)($scope);
   }

   $scope.close = function(){
     div.innerHTML += "close";
         $compile(div)($scope);
   }
});

如您所见,我正在重新编译 div 并将当前范围绑定到它,它会起作用。这是工作示例:http://codepen.io/anon/pen/PNrRKL?editors=1010

【讨论】:

  • 是的,做到了!我确实在另一个示例中看到了 $compile 方法,但那个方法更加奢侈,所以我认为它不适用于我的用例。再次感谢!
【解决方案2】:

试试看

var app = angular.module('myApp', []);
app.controller('appCtrl', function($scope) {
   var div = angular.element(document.getElementById('div'));

   $scope.open = function(){
       div.append("open");
   }

   $scope.close = function(){
       div.append("close");
   }
});

【讨论】:

  • 这确实有效,但是 codepen 的链接是手头问题的演示。我仍然能够理解为什么事件有时不起作用以及角度解决方案是什么。
  • 可能angularjs不能混合原生js
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-06
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-21
相关资源
最近更新 更多