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

为什么在调用element.remove时不触发$ destroy?

堵睿范
2023-03-14
问题内容

在下面的示例中,我无法弄清楚为什么未触发$ destroy事件。有人可以解释为什么不触发它,以及在什么情况下会触发它吗?

这是pl客:http
://plnkr.co/edit/3Fz50aNeuculWKJ22iAX?p=preview

JS

angular.module('testMod', [])
.controller('testCtrl', function($scope){
  $scope.removeElem = function(id) {
    var elem = document.getElementById(id);
    angular.element(elem).remove();
  }
}).directive('testDir',[function() {
  return {
    scope:true,
    link: function(scope) {
      console.log('in directive');
      scope.$on('$destroy', function(){
        alert('destroyed');
      })
    }
  }
}]);

HTML

<body ng-controller='testCtrl'>
  <div testDir id='test'>I will be removed.</div>
  <button ng-click='removeElem('test')'>remove</button>
</body>

问题答案:

问题是您正在上监听$destroy事件scope,但$destroy正在上触发该事件element

来自angular.js来源(我确定它已记录在网站上的某个地方,但我没有看):

$destroy-AngularJS拦截所有jqLit​​e /
jQuery的DOM破坏API,并在所有要删除的DOM节点上触发此事件。这可用于在删除DOM元素之前清除任何第三方绑定。

您的指令应为(请注意,我在和处添加了scopeelementattrs作为link参数):另外,这是一个插件。

directive('testDir',[function() {
  return {
    scope:true,
    link: function(scope,element,attrs) {
      console.log('in directive');
      element.on('$destroy', function(){
        alert('destroyed');
      })
    }
  };
}]);


 类似资料:
  • 我试着读过类似的问题,但没有成功。

  • 问题内容: 我的代码中有一个。我已添加。但是它还是没有被触发。我已经尝试了很多时间,但是没有找到解决方案。 但是控制台中没有任何内容。请建议我我在做什么错。 问题答案: FocusListener不是JComboBox的适当监听器,另外一个监听器可以创建无限循环(尤其是可编辑的JComboBox), 的FocusListener是异步的,有时是太难捕捉事件是正确的订单特别是在案件JComponen

  • 我需要测试一个服务类,但是当我试图模拟dao类时,它没有被触发,因此不能使用ThenReturn()。 我认为问题是因为我在服务类(Spring MVC 3.1)中为我的Dao和@Autowired使用了一个接口: 接口: 执行情况: 成功了!

  • 我创建了一个简单的GUI,一个JComboBox和JButton。JButton用testString类的对象填充JComboBox。当鼠标悬停在JComboBox上时,它几乎触发了testString类的toString()25次。为什么会这样?我们怎样才能阻止它? 以下是代码: 图形用户界面输出

  • 本文向大家介绍render在什么时候会被触发?相关面试题,主要包含被问及render在什么时候会被触发?时的应答技巧和注意事项,需要的朋友参考一下 在 React 中,只要执行了 setState 方法,就一定会触发 render 函数执行; 组件的 props 改变了,不一定触发 render 函数的执行,除非 props 的值来自于父组件或者祖先组件的 state

  • 我已经初始化了一个数组状态,当我更新它时,我的组件不会重新渲染。以下是一个最低限度的概念证明: 根据这段代码,似乎输入应该包含要开始的数字0,并且无论何时更改,状态也应该更改。在输入中输入“02”后,应用程序组件不会重新渲染。但是,如果我在5秒后执行的onChange函数中添加setTimeout,则表明数字确实已更新。 对为什么组件不更新有什么想法吗? 这是一个带有概念证明的代码沙盒。