Angularjs1.x+ocLazyLoad+angular-ui-router+ui-router-extras

Git SSH密钥免密配置全攻略:告别重复输入passphrase SSH密钥认证是远程服务器安全访问和代码版本控制的核心机制,它基于非对称加密原理,通过公钥和私钥配对实现身份验证。在实际开发中,为私钥设置passphrase能显著提升安全性,但每次Git操作都需手动输入,会严重打断工作流。其技术价值在于通过ssh-agent密钥代理服务,将解密后的私钥缓存在内存中,实现单次认证、多次使用。这一机制广泛应用于持续集成、自动化部署及日常开发场景。本文聚焦于解决Git操作中反复要求输入SSH密钥passphrase的痛点,通过详解ssh-agent在Windows、macOS和 阅读详情

前言

总是听人说angularjs的学习曲线很高,个人认为ng的难度是有的,但是要说难到哪里,其实也不见得。总结来说,ng比较有难度的地方应当是路由和lazy加载。今天就把这部分内容通过一个小示例分享给大家。

依赖

  1. Angularjs
  2. angular-ui-router
  3. ui-router-extras.js
  4. ocLazyLoad.js

项目包结构

项目包结构

代码

index.html

<!Doctype html>
<html ng-app="Main">
    <head>
    </head>
    <body>
        <div ui-view>
        </div>
        <script src="lib/angular-1.4.8/angular.js"></script>
        <script src="lib/angular-ui-router/angular-ui-router.js"></script>
        <script src="lib/ui-router-extras/ct-ui-router-extras.js"></script>
        <script src="lib/oclazy/ocLazyLoad.js"></script>
        <script src="apps/main/MainModule.js"></script>
    </body>
</html>

MainModule.js

angular.module('Main',['ui.router', 'ct.ui.router.extras', 'oc.lazyLoad'])
.config(['$stateProvider', '$futureStateProvider', '$ocLazyLoadProvider',function($stateProvider, $futureStateProvider, $ocLazyLoadProvider){
    $futureStateProvider.addResolve(function($http){//从远程加载
        return $http({
            url : 'apps/main/states.json',
            method : "GET",
            headers : {
                'Content-Type' : 'application/json;charset=UTF-8'
            }
        }).then(function (resp) {
            if (resp && resp.data && resp.data) {
                angular.forEach(resp.data, function (appItem) {
                    var fstate = {
                        type: appItem.type,
                        stateName: appItem.stateName,
                        url: appItem.url,
                        load: [{
                            name: appItem.moduleName,
                            reconfig: true,
                            files: [appItem.src]
                        }]
                    };
                    $futureStateProvider.futureState(fstate);
                });
            }
        });
    });

    $futureStateProvider.stateFactory('ocLazyLoad', function($q, $ocLazyLoad, futureState) {
        var deferred = $q.defer();

        $ocLazyLoad.load(futureState.load).then(function() {
            deferred.resolve();
        }, function() {
            deferred.reject();
        });

        return deferred.promise;
    });

    $futureStateProvider.futureState({
        "type" : "ocLazyLoad",
        "stateName" : "login",
        "url" : "/login",
        load : {
            name: "LoginModule",
            reconfig: true,
            files: ["apps/login/LoginModule.js"]
        }
    });
}])
.run(['$state','$timeout',function($state,$timeout){
    $state.go('login');
}]);

states.json

[{
    "type" : "ocLazyLoad",
    "moduleName":"PageModule",
    "stateName" : "page",
    "url" : "/page",
    "src" : "apps/page/PageModule.js"
}]

LoginModule.js

angular.module('LoginModule',[])
.config(['$ocLazyLoadProvider','$stateProvider',function($ocLazyLoadProvider,$stateProvider){
    $stateProvider.state('login',{
        url : '/login',
        controller : 'LoginCtrl',
        templateUrl : 'apps/login/view/login.html',
        resolve : {
            controller : ['$ocLazyLoad',function($ocLazyLoad){
                return $ocLazyLoad.load({
                    name : 'LoginCtrlModule',
                    files : ['apps/login/controller/LoginCtrlModule.js']
                });
            }]
        }
    });
}]);

LoginCtrlModule.js

angular.module('LoginCtrlModule',[])
.controller('LoginCtrl',['$scope',function($scope){

}]);

login.html

<div>
    login page
    <a href="#/page/page1">go to page1</a>
    <a href="#/page/page2">go to page2</a>
</div>

PageModule.js

angular.module('PageModule',[])
.config(['$ocLazyLoadProvider','$stateProvider','$futureStateProvider',function($ocLazyLoadProvider,$stateProvider,$futureStateProvider){
    $futureStateProvider.futureState({
        "type" : "ocLazyLoad",
        "stateName" : "page.page1",
        "url" : "/page1",
        load: [{
            name: "Page1Module",
            reconfig: true,
            files: ["apps/page/page1/Page1Module.js"]
        }]
    });

    $futureStateProvider.futureState({
        "type" : "ocLazyLoad",
        "stateName" : "page.page2",
        "url" : "/page2",
        load: [{
            name: "Page2Module",
            reconfig: true,
            files: ["apps/page/page2/Page2Module.js"]
        }]
    });

    $stateProvider.state('page',{
        url : '/page',
        template : '<div>I am the page.</div><div ui-view></div>'
    });
}]);

Page1Module.js

angular.module('Page1Module',[])
.config(['$ocLazyLoadProvider','$stateProvider',function($ocLazyLoadProvider,$stateProvider){
     $stateProvider.state('page.page1',{
        url : '/page1',
        controller : 'Page1Ctrl',
        templateUrl : 'apps/page/page1/view/page1.html',
        resolve : {
            controller : ['$ocLazyLoad',function($ocLazyLoad){
                return $ocLazyLoad.load({
                    name : 'Page1CtrlModule',
                    files : ['apps/page/page1/controller/Page1CtrlModule.js']
                });
            }]
        }
    });
}]);

Page1CtrlModule.js

angular.module('Page1CtrlModule',[])
.controller('Page1Ctrl',['$scope',function($scope){

}]);

page1.html

<div>
    I m the page1.
    <a href="#/login">go to login.</a>
</div>

Page2Module.js

angular.module('Page2Module',[])
.config(['$ocLazyLoadProvider','$stateProvider',function($ocLazyLoadProvider,$stateProvider){
     $stateProvider.state('page.page2',{
        url : '/page2',
        controller : 'Page2Ctrl',
        templateUrl : 'apps/page/page2/view/page2.html',
        resolve : {
            controller : ['$ocLazyLoad',function($ocLazyLoad){
                return $ocLazyLoad.load({
                    name : 'Page2CtrlModule',
                    files : ['apps/page/page2/controller/Page2CtrlModule.js']
                });
            }]
        }
    });
}]);

Page2CtrlModule.js

angular.module('Page2CtrlModule',[])
.controller('Page2Ctrl',['$scope',function($scope){

}]);

page2.html

<div>
    I m the page2.
    <a href="#/login">go to login.</a>
</div>

说明

整个示例是我个人亲自己写的,真心希望对大家有所帮助。可能有人想问一些其他的问题,比如指令什么的。个人感觉这些都是比较基础的东西,所以不在这里说了,有需要讨论的欢迎留言。对于本文里所讲的东西,如果有不明白的地方,可以联系我,一起交流学习。微信号:472575390.

angular使用requirejs/ui-router/angularAMD实现动态加载模块 最近在做angular项目,发现使用requirejs来加载模块的时候,它会根据已经建立好的依赖一次性把所有模块加载下来,而我们的项目中有两个不同的产品,我们希望进入每个产品时只加载该产品对应的模块。但是要结合ui-router来实现,网上的例子还实在少,好不容易有同事搜到类似的解决方案,试了半天终于成功了,原文章在这里: http://christopherthielen.github.io/ 阅读详情

相关推荐

ui-router-redirectTo:Angular UI-Router的简单状态重定向

ui-router-redirectTo Angular UI-Router的简单状态重定向 要求 角> = 1.0.8 UI路由器> = 0.2.0 用法示例 简单的 将模块添加为依赖项: angular . module ( 'yourApp' , [ 'ui.router' , 'ui.router.redirectTo' ] ) ; 然后只需在声明状态时添加redirectTo属性: $stateProvider . state ( 'someState' , { redirectTo : 'anotherState' } ) ; 看,简单! 太简单。 几乎毫无意义的简单。 真实世界 在使用UI-Router进行状态管理的现实世界中,我们经常发现自己正在处理嵌套状态和抽象状态。 ui-router-redirectTo旨在服务于简化这些情况。 这是一个抽象状态

推荐:UI-Router Extras —— 功能强大的Angular UI-Router扩展

如果你在寻找一种方式来增强你的AngularJS应用的路由功能,那么UI-Router Extras可能是你的理想选择。这个开源项目为UI-Router添加了一系列的附加特性,帮助开发者构建大型且模块化的应用程序。 ### 1、项目介绍 UI-Router Extras是由Christopher Thielen开发的一个扩展库,它与Angular UI-Router紧密集成,提供了诸如粘性状态...

gitblog_00036的博客 495

前端项目-ui-router-extras.zip

前端项目-ui-router-extras,UI路由器附加功能:粘性状态、未来状态、深层状态重定向、过渡承诺

AngularJS实际项目应用——模块划分

angularjs的设计理念是鼓励多模块的,每个模块可以依赖于其它模块,这样可以用模块的概念匹配业务功能。所以在设计angularjs的程序时,可以根据一定的业务规则进行模块划分。 一般来讲,一个angularjs的程序都会有一个app模块,也就是程序的入口点。当然如果功能较少,一个app模块就足够了,剩下的service和controller等其他组件都可以挂到这个app上。但是程序一扩张,就

Challenge Next Challenge 2856

KVNAND架构:解决边缘设备部署LLM的内存与带宽挑战

大语言模型(LLM)在边缘设备部署时面临内存容量和带宽限制的核心挑战。传统方案依赖DRAM存储KV缓存,导致高昂成本和性能瓶颈。闪存计算(IFC)通过计算单元下沉和流水线优化缓解部分问题,但仍受限于DRAM依赖。KVNAND架构创新性地将KV缓存直接存储在3D NAND闪存中,结合异构计算和页面级KV映射技术,显著降低延迟和能耗。该架构特别适用于长上下文场景,如文档分析和个人助理应用,能有效解决内存溢出(OOM)问题并提升计算单元利用率。关键技术包括头组并行(HG)执行和混合键合设计,为边缘AI部署提供了新

weixin_27215337的博客 320

Vivado项目开发新思路:用VSCode写代码,用Vivado管理IP核与综合(Windows/Mac环境通用指南)

本文介绍了如何结合Vivado和VSCode的优势,打造高效的FPGA设计工作流。通过配置VSCode的Verilog插件和Vivado环境集成,开发者可以在VSCode中编写代码,同时利用Vivado管理IP核与综合,显著提升开发效率和团队协作体验。

weixin_42545503的博客 336

angularJs ui-router路由之多视图实现菜单缓存切换

** angularJs ui-router路由之多视图实现菜单缓存切换 **

qq_43237014的博客 574

Atlas 300I Pro推理卡性能深度测试:对比业界同类产品的能效比与算力表现

本文对昇腾Atlas 300I Pro推理卡进行了深度性能评测,重点对比了其与业界同类产品的能效比与算力表现。实测数据显示,该卡在运行BERT等模型时展现出高达39.6句子/秒/瓦的卓越能效比,电力成本可降低40%以上,同时其达芬奇架构和硬件加速特征检索能力,为高密度在线推理和向量检索场景提供了强大支撑。

weixin_29031161的博客 577

AngularJS ui-router (嵌套路由)

我测试的只能在火狐运行 介绍 AngularJS 嵌套路由:这是我针对同一个主题(ui-router)的第二篇文章. 如果你对第一篇文章感兴趣的话,可以访问 这里. 好了,让我们继续吧,来看看嵌套的ui-router状态是怎么回事. ui-router和同属AngularJS框架一部分的ng-route一样强大. ui-router提供了让我们可以做路由嵌套和视图命名的特性. 我们

csdt_csdt的专栏 1658

OpenGL纹理贴图

OpenGL纹理1. 基本概念2. 纹理环绕方式3. 纹理过滤3.1 GL_NEAREST3.2 GL_LINEAR3.3 多级渐远纹理 (Mipmap)4. 纹理加载与创建4.1 纹理加载4.2 纹理创建4.3 纹理的使用 1. 基本概念 纹理是一个2D图片(甚至也有1D和3D的纹理),它可以用来表示物体的细节特征,希望绘制一个有足够多细节的物体,当然可以用足够多的顶点颜色来描述,但是无疑也增加了许多额外的开销;另一种办法就是使用纹理。 学习之前先展示一张实现的纹理图以更好理解纹理! 还是这张图为了将纹

牵LV小猪精的博客 8921

不用SE63逐个翻译!ABAP函数LXE_OBJ_TEXT_PAIR_WRITE批量处理TCODE描述的3种姿势

本文介绍了三种利用ABAP函数LXE_OBJ_TEXT_PAIR_WRITE批量翻译SAP事务码(TCODE)描述的高效方案,旨在替代SE63逐个翻译的低效操作。内容涵盖从基础循环、Excel导入到全自动程序集成的实现方法,帮助开发者显著提升批量翻译效率,并深入解析了SAP翻译体系的核心原理与实战技巧。

weixin_42593130的博客 659

AngularJS实际项目应用——模块路由

本项目利用了ui-router-extras库的特性,实现了路由的动态加载,即对路由按照模块进行切割,只有用户真正访问某个模块下的页面时,才会去加载对应的模块文件,配置路由。设想一下如果项目有几十个路由甚至更多,用ui-router的方式在app启动时候用config方法去配置,会显得臃肿低效率。如果项目由多个人开发,那么每个人都需要更改自己模块下路由的配置,很容易造成代码冲突。 具体ui-ro

Challenge Next Challenge 2630

S32K344 Bootloader实战:一个按键实现从Boot到App的无缝跳转(附完整代码)

本文详细介绍了基于NXP S32K344微控制器的Bootloader开发实战,重点解析如何通过一个硬件按键实现从Boot到App的可靠跳转。内容涵盖内存分区规划、中断向量表重映射、外设初始状态管理等核心要素,并提供了完整的代码示例和调试技巧,适用于汽车电子和工业控制等高可靠性应用场景。

weixin_29192365的博客 307

angular1x初始与架构演进(三)Ui-Router+OcLazyLoad加载模块

七月份的时候有写过一篇OcLazyLoad文章,当时只是初略了解了一下,是为了解决当前项目加载模块过多的问题,但是最后发现项目中模块间耦合性过于复杂,然后项目给出的时间也不是很多,后面就放弃了,这次新项目中使用了。 加载js+css: angular.module('myRouters', ['ui.router', 'oc.lazyLoad']) .config(['$statePr

侞婼冇罪 3290

AI 时代嵌入式工程师的能力模型与学习路线:全系列收官

AI 时代嵌入式工程师的能力模型与学习路线:全系列收官

weixin_42162924的博客 31

ParaView: GUI 轴网格

ParaView: GUI 轴网格

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1922

深究AngularJS——ui-router详解

1.配置使用ui-router 1.1导入js文件 需要注意的是:必须导入angular.min.js这个文件,且angular.min.js必须导入在angular-ui-router.min.js前面。 script type="text/javascript" src="JS/angular.min.js">script> script type="text/javascr

巴黎的妖 1128

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ui-router使用方法

index.html页面     AngularJS Home Page             var myApp = angular.module("myApp", ['ui.router']);   myApp.config(['$stateProvider', '$urlRouterProvider', function ( $stat

笔芯君 869

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Angular-Ui-Router+ocLazyLoad动态加载脚本

在使用angular过程以前同事是采取一次性加载方式,在index页面一次性加载所有的js跟css,这种加载方式只适合教学和小型项目中,中大型不建议使用,加载速度影响到用户体验。 在使用了Ui-Router以后,我第一想法就是把每个功能组件化,在请求视图的时候再去加载该页面js和css,index页面主要加载必须文件:angular.js 于是尝试了下,这样去写,但是发现angular报错,原

侞婼冇罪 4711

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Jellium Desktop 连接服务器与多账户上手指南

Jellium Desktop 是一款非官方 Jellyfin 桌面客户端,把官方 Web 界面和 mpv 播放器装进同一个原生窗口,让你免开浏览器就能连接服务器、直接播放。它适合在一台电脑上为全家各自登录、各看各内容的 Jellyfin 用户,也适合想跳过网页书签、用原生体验看片的人。 ## 从这几个场景开始 - 家庭共用一台媒体服务器:父母、孩子各有一个 Jellyfin 账户,收藏和播放

gitblog_00443的博客 682

三步给 GitHub 换上中文面孔:开源汉化插件 github-chinese 完整实践指南

凌晨一点,你要查一个热门项目的 Issue 讨论,页面却是满屏 Milestones、Pull requests、Discussions,只能逐词查翻译。开源项目 github-chinese(GitHub 汉化插件)就是为这一刻准备的:它是一个基于 Tampermonkey 的用户脚本,装上之后把 GitHub 界面几乎全部元素中文化,还能对项目描述一键机器翻译——不需要换浏览器、改 DNS,原

gitblog_00438的博客 324

Torrentio终极指南:如何用开源插件打造你的私人流媒体中心

还在为找不到高清影视资源而烦恼?想要在Stremio中享受海量免费内容?Torrentio正是你需要的解决方案。这款强大的开源插件能够将Stremio从一个简单的媒体播放器转变为功能完整的流媒体平台,为你提供海量的电影、电视剧和动漫资源。在这篇完整指南中,我将带你深入了解Torrentio的核心功能、安装配置方法以及最佳实践技巧。 ## 🔍 什么是Torrentio?为什么你需要它? Tor

gitblog_00412的博客 510

Pinocchio入门指南:如何快速创建无依赖的Solana程序

Pinocchio是一个无外部依赖的Rust库,专为创建Solana程序而设计。它仅依赖Solana SDK中专门为链上程序设计的类型,有效缓解了依赖问题,并提供了高效的零复制库,在计算单元消耗和二进制大小方面都进行了优化。 ## 为什么选择Pinocchio? Pinocchio作为Solana程序开发工具,具有三大核心优势: - **无外部依赖**:仅使用Solana SDK核心类型,避

gitblog_00179的博客 751
上一篇: karaf jvm参数配置
下一篇: 关于Angularjs1.x dom ready
sleeper01
博客等级 码龄15年 385粉丝 57原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sleeper01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值