我正在使用带有Angular UI Bootstrap的AngularJS - Angular UI Bootstrap版本是一个旧版本(0.4.0)。
我正在使用Modal指令。在模态主体中,我有自己的指令来显示一个表单。
此form指令具有一个控制器函数,用于将表单提交到服务器。
模态有一个按钮,它调用一个控制器函数(不同的控制器)来广播和事件。表单控制器有一个事件侦听器,当事件被引发时,它会提交表单。
综上所述,表单控制器只有一个提交表单的简单功能:
$scope.submitForm = function () {
//Submit the form to the server
};窗体控制器也有一个事件处理程序
$scope.$on('submitEvent', function () {
$scope.submitForm();
});该模式是引发事件的另一个控制器的一部分:
$scope.$broadcast('submitForm');现在问题来了。
每次打开模式时,我都会发现创建了一个新的作用域(正如预期的那样,因为我有一个指令的隔离作用域)。然而,一旦关闭了模式,作用域似乎并没有被破坏。
每次打开模式时,都会创建一个新的作用域。但之前的范围仍然存在。它基本上是作为孤立作用域存在的-它不会影响新模式的新作用域。
当模式控制器引发submitForm事件时,问题就出现了。当事件被引发时,所有的事件侦听器都会被激发。因此,即使是孤立作用域上的事件侦听器也会多次触发提交空表单(与打开模式的次数一样多),最后最后一个活动作用域的事件侦听器会触发提交实际表单的事件侦听器。
因此,我的作用域似乎没有绑定到任何模板,但似乎会随着应用程序的使用而消耗内存。
我的问题是没有正确调用submitForm函数--我只想知道如何处理孤立作用域……
发布于 2014-03-13 02:34:36
在0.10版本中也存在这样的孤立作用域问题,应该在下一个版本中修复。
对于孤立作用域,您可以在模态控制器中通过$scope.$destroy()手动删除它们。在此之后,所有的模态作用域侦听器都将处于非活动状态。删除还意味着当前作用域有资格进行垃圾收集。
https://stackoverflow.com/questions/22359795
复制相似问题