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

别再硬拔了!用这3个终端命令轻松搞定Mac上移动硬盘‘被程序占用’的问题

本文介绍了3个终端命令解决Mac上移动硬盘‘被程序占用’的问题,包括使用`diskutil list`定位硬盘、`lsof`查找占用进程以及`diskutil unmount`安全卸载。这些方法能有效避免数据风险,提升操作效率,特别适合开发者和技术爱好者。

weixin_33507732的博客 292

Chromium实用技巧篇-如何下载指定版本的Chromium(一)

通过本指南,您已成功掌握如何在Windows系统上下载并安装最新版本的Chromium浏览器。我们详细介绍了从进入Chromium官网,到查找最新版本号,再到下载和安装的每一个步骤。通过这些步骤,您不仅能够体验到最新的浏览器功能,还可以参与开源项目的开发,享受高速、稳定、安全的浏览体验。

守城小轩的技术窝棚 1万+

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

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

qq_43237014的博客 574

iPhone存储空间耗尽自救指南:从“白苹果”死锁到成功保数据刷机

本文详细介绍了iPhone存储空间耗尽导致'白苹果'死锁的解决方案,通过保留数据刷机方法成功恢复设备运行。文章分享了从失败尝试到最终成功的完整流程,包括关键操作步骤和预防措施,帮助用户在紧急情况下保住重要数据。

weixin_32578161的博客 286

AngularJS ui-router (嵌套路由)

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

csdt_csdt的专栏 1658

后向投影算法(BPA)-SAR成像算法系列(二)

SAR成像算法:后向投影算法(BPA)原理介绍及实现步骤解析。

yjh_2019的博客 1万+

Windows安装ros2(Jazzy版本+win10/win11)-1.配置windows终端

更高版本的terminal可能设置里更加丰富, 有默认以管理员身份启动的选项等,可自行配置。打开微软应用商店, 在其中搜索并下载 Terminal 即可(注意别挂梯子)下载并安装, 安装的位置自行替换,建议别放到系统盘中。点击任务栏中的搜索, 输入store。

weixin_48398592的博客 1452

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

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

Challenge Next Challenge 2630

基于Matlab的自动泊车系统开发:利用模糊控制实现智能停车解决方案的详细教程

Matlab是一种广泛应用于科学计算、工程建模与仿真的编程语言,其强大的工具箱和简洁的编程语法,使其成为开发自动泊车系统的理想选择。在开始编写代码之前,我们需要搭建Matlab的工作环境,并熟悉相关的工具箱,如Fuzzy Logic Toolbox,用于实现模糊控制。首先,确保你已经安装了Matlab软件,并加载了必要的工具箱。接下来,我们将逐步讲解如何在Matlab中实现自动泊车系统。

qq_38334677的博客 662

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

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

侞婼冇罪 3290

硬件工程师笔记——三极管Multisim电路仿真实验汇总

NPN型三极管:由N型半导体、P型半导体和N型半导体组成,即NPN结构。 PNP型三极管:由P型半导体、N型半导体和P型半导体组成,即PNP结构。 三极管的工作原理基于电流的控制和放大,其核心是基区对电流的控制作用。 将三极管等效为两个串联的二极管进行等效分析

XU157303764的博客 2635

TPAMI 2025 | 从缺失碎片到杰作:基于上下文自适应扩散的图像修复

图像修复是一项具有挑战性的任务,尤其是要确保生成的内容与图像的现有部分无缝融合。尽管最近的扩散模型展现出了潜力,但它们在保持已知区域和未知(缺失)区域之间的连贯性方面常常遇到困难。这个问题源于扩散过程中缺乏明确的空间和语义对齐,导致生成的内容无法与原始图像平滑融合。此外,扩散模型通常依赖全局学习分布,而非局部特征,这使得生成的图像部分与现有图像部分之间存在不一致。在这项工作中,作者提出了ConFill,这是一个新颖的框架,引入了上下文自适应差异(CAD)模型,以确保在整个扩散过程中,已知区域和未知区域的中间

小白学视觉 238

深究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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ui-router使用方法

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

笔芯君 869

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

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

侞婼冇罪 4711

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、付费专栏及课程。

余额充值