卸载/销毁 Angular 延迟加载组件

2024-06-19

我的设置与此处找到的帖子类似http://ify.io/lazy-loading-in-angularjs/ http://ify.io/lazy-loading-in-angularjs/处理 Angular 中我的应用程序的各种组件的延迟加载。

我遇到的问题是,加载的组件越多,应用程序的内存占用量就会增加(我知道,这是显而易见的)。有没有一种干净的方法来“卸载”或“销毁”已延迟加载的角度服务/控制器/指令/等?

简单例子(供参考)

app.js

var app = angular.module('parentApp', ['ui.router']).config(function ($stateProvider, $urlRouterProvider, $controllerProvider, $compileProvider, $filterProvider, $provide) {

        var app = angular.module('app', ['ui.router'])
            .config(function ($stateProvider, $urlRouterProvider, $controllerProvider, $compileProvider, $filterProvider, $provide) {

                app.lazy = {
                    controller: $controllerProvider.register,
                    directive: $compileProvider.directive,
                    filter: $filterProvider.register,
                    factory: $provide.factory,
                    service: $provide.service
                };

                $urlRouterProvider.otherwise('/home');
                $stateProvider
                    .state('home', {
                        url: '/home',
                        templateUrl: 'views/main.html',
                        controller: 'MainCtrl'
                    })
                    .state('lazyLoad', {
                        url: '/lazyLoad',
                        templateUrl: 'views/lazyLoad.html',
                        controller: 'lazyLoadCtrl',
                        resolve: {
                            promiseObj: function ($q, $rootScope) {
                                var deferred = $q.defer();
                                var dependencies = [
                                    'scripts/controllers/lazyLoad.js'
                                ];

                                $script(dependencies, function () {
                                    $rootScope.$apply(function () {
                                        deferred.resolve();
                                    });
                                });

                                return deferred.promise;
                            }
                        }
                    });
            });

和延迟加载控制器lazyLoad.js

angular.module('app')
  .lazy.controller('lazyLoadCtrl', function($scope){
        $scope.greeting = 'hi there';
      }
);

如果用户导航到#/lazyLoad,应用程序将加载到控制器(和视图)中,以及它被告知需要的其他内容。但是当用户离开时#/lazyload,我希望所有先前加载的组件都被卸载/销毁。

我如何完全取消注册/销毁/卸载(不确定这里正确的动词是什么......)“lazyLoadCtrl”控制器。如上所述,理想情况下,一旦不再需要延迟加载的控制器、指令、过滤器、工厂和服务,我希望能够卸载它们。

Thanks!


也许你可以尝试调用scope.$destroy()

来自 angularjs 范围文档https://docs.angularjs.org/api/ng/type/$rootScope.Scope https://docs.angularjs.org/api/ng/type/%24rootScope.Scope

$销毁(); 从父作用域中删除当前作用域(及其所有子作用域)。删除意味着对 $digest() 的调用将不再传播到当前作用域及其子作用域。删除还意味着当前作用域符合垃圾回收条件。

$destroy() 通常由 ngRepeat 等指令使用来管理循环的展开。

就在作用域被销毁之前,会在此作用域上广播 $destroy 事件。应用程序代码可以注册一个 $destroy 事件处理程序,这将使其有机会执行任何必要的清理。

请注意,在 AngularJS 中,还有一个 $destroy jQuery 事件,可用于在从 DOM 中删除元素之前清理 DOM 绑定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

卸载/销毁 Angular 延迟加载组件 的相关文章

随机推荐

  • SetWindowsHookEx 函数返回 NULL

    我正在研究 DLL 注入 但收到错误如下 挂接进程失败 87 参数不正确 目标进程和dll都是64位的 注入代码为 BOOL HookInjection TCHAR target TCHAR dll name https msdn micr
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工
  • 黄瓜与 RSpec

    我想开始深入研究 BDD 我以前从未使用过 TDD 现在 不确定我是否应该从学习 RSpec 开始 然后跳到 Cucumber 或者直接使用 Cucumber 我一直在互联网上阅读有关两者的内容 在我看来 Cucumber 可能是 RSpe
  • iPhone - 创建自定义 UITableViewCell 顶部和底部边框

    我一直在到处寻找 但还没有找到我的答案 我使用 JSON 中的动态单元格填充 UITableView 并尝试隐藏任何额外的单元格 我关闭了IB中的分隔符 当然所有的单元格分隔符都消失了 如何在每个 tableviewcell 的底部和顶部添
  • 了解 Python 2.7 中的缩进错误

    在编写 python 代码时 我往往会遇到很多缩进错误 有时 当我删除并重写该行时 错误就会消失 有人可以为菜鸟提供 python 中 IndentationErrors 的高级解释吗 以下是我在玩 CheckIO 时收到的最近 inden
  • Django User 模型,添加功能

    我想向 Django 的默认用户模型添加一个新函数 用于检索模型类型的相关列表 这样的 Foo 模型 class Foo models Model owner models ForeignKey User related name owne
  • 没有 Unicode 字节顺序标记。无法切换到 Unicode

    我正在使用 XSD 编写 XML 验证器 下面是我所做的 但是当验证器到达该线时while list Read 它给了我错误 没有 Unicode 字节顺序标记 无法切换到 Unicode 有人可以帮我解决吗 public class Va
  • Android repo 脚本创建的 .repo/projects/ 中的裸 git 存储库的用途是什么?

    The 安卓源码 http android git kernel org 由以下人员管理repo http source android com source version control html 使用 repo 同步时 一个名为 re
  • 以编程方式设置 Logback Appender 路径

    我正在尝试以编程方式设置 Logback 附加程序路径 滚动文件附加器 http logback qos ch apidocs ch qos logback core rolling RollingFileAppender html准确地说
  • Kotlin Room 数据库单例模式

    我正在尝试创建单人房间数据库 我找到了两种解决方案 但我不知道它们之间有什么区别 根据这个文件 companion object Volatile private var INSTANCE AppDatabase null fun getI
  • 对 HTTP 处理程序的同时请求不起作用

    我的 ASP Net 应用程序中有一个通用 HTTP 处理程序 ashx 它执行一些基本但耗时的计算 将进度语句打印到输出 以便让用户了解情况 执行这些计算涉及读取一些在使用处理程序时锁定的数据文件 因此对处理程序的两次调用不要立即开始处理
  • 无法通过 Android 应用程序访问我的笔记本电脑的本地主机

    因此 我在发布此内容之前做了一项研究 我发现的解决方案不起作用 更准确地说 连接到我的笔记本电脑的 IPv4192 168 XXX XXX 没用 连接到10 0 2 2 加上端口 不起作用 我需要测试使用 Django Rest 框架构建的
  • 如何使用 LazyColumn animateItemPlacement() 而不自动滚动更改?

    我正在使用一个LazyColumn以类似清单的方式 该列表首先显示所有待完成的项目 最后显示所有已完成的项目 点击一个项目可以切换它是否完成 这是我正在做的 MWE data class TodoItem val id Int val la
  • 慢速自动增量重置

    我有很多表 由于某些原因 我需要在应用程序启动时调整这些表的自动增量值 我尝试这样做 mysql gt select max id from item max id 97972232 1 row in set 0 05 sec mysql
  • Django TastyPie 地理距离查找

    我正在使用 TastyPie 进行地理距离查找 这有点困难 因为 TastyPie 官方不支持它 在 Github https gist github com 1067176 上我找到了以下代码示例 def apply sorting se
  • 如何从 python 脚本执行 7zip 命令

    我试图了解如何使用 os system 模块来执行 7zip 命令 现在我不想用 Popen 或 subprocess 让事情变得复杂 我已经安装了 7zip 并将 7zip exe 复制到我的用户文件夹中 我只想提取我的测试文件 inst
  • Pandas 字典键到列[重复]

    这个问题在这里已经有答案了 我有一个像这样的数据框 index column1 e1 u c680 5 u c681 1 u c682 2 u c57 e2 u c680 6 u c681 2 u c682 1 u c57 e3 u c68
  • 如何在提交表单之前删除自动数字格式?

    我正在使用 jQuery 插件自动数字 http www decorplanit com plugin 但是当我提交表单时 我无法删除之前字段上的格式POST 我尝试使用 input autonumeric destroy 和其他方法 但它
  • 卸载/销毁 Angular 延迟加载组件

    我的设置与此处找到的帖子类似http ify io lazy loading in angularjs http ify io lazy loading in angularjs 处理 Angular 中我的应用程序的各种组件的延迟加载 我