【实例分解二】angularjs根据路由按需加载Controller

开始笔记之前,把早上检测到的angularjs中的命名问题做一下记录。

检测工具:google浏览器扩展工具angularJS,结果如下:

angularjs中,module要遵守lowerCamelCase原则,例:"myApp"; controller要遵守UpperCamelCase原则并且要以Controller结尾,例:"MainController".

这一篇笔记主要对angularjs根据路由按需加载Controller的操作进行了说明,也就是上一篇中提到的routeConfig这个引用的文件。

首先在app.js文件中引用该模块并将angularjs的$controllerProvider服务传入该对象中,我们要用到$controllerProvider对加载进来的controller文件进行依赖关系的注入,这样才能达到我们的目的。

1 define([‘angular‘, ‘routeConfig‘], function(angular, routeConfig) {
2         var app = angular.module(‘myApp‘, [‘ngRoute‘,‘ngDialog‘,
3                 function($controllerProvider) {
4                         routeConfig.setControllerProvider($controllerProvider);
5                 }
6         ]);
7         return app;
8 })

routeConfig:

 1 define([], function() {
 2
 3         var $controllerProvider;
 4
 5         function setControllerProvider(value) {
 6                 $controllerProvider = value;
 7         }
 8
 9         function config(templateUrl, controllerName) {
10                 if (!$controllerProvider) {
11                         throw new Error("$controllerProvider is not set!");
12                 }
13
14                 var defer,
15                         routeDefinition = {};
16
17                 routeDefinition.templateUrl = templateUrl;
18                 routeDefinition.controller = controllerName;
19                 routeDefinition.resolve = {
20                         delay: function($q, $rootScope) {
21                                 defer = $q.defer();
22                                 var dependencies = [controllerName];
23                                 require(dependencies, function() {
24                                         var controller = arguments[0];
25                                         $controllerProvider.register(controllerName, controller);
26                                         defer.resolve();
27                                         $rootScope.$apply()
28                                 })
29                                 return defer.promise;
30                         }
31                 }
32                 return routeDefinition;
33         }
34
35         return {
36                 setControllerProvider: setControllerProvider,
37                 config: config
38         }
39 })

route.js配置信息

 1 define([‘app‘, ‘routeConfig‘], function(app, routeConfig) {
 2         return app.config(function($routeProvider) {
 3             //TemplateURl相对于index.html路径,Controller相对于route.js路径
 4                 $routeProvider.when(‘/link‘, routeConfig.config(‘../link/link.html‘, "../items/link/linkCtrl"));
 5                 $routeProvider.when(‘/user‘, routeConfig.config(‘../user/user.html‘, "../items/user/userCtrl"));
 6                 $routeProvider.when(‘/message‘, routeConfig.config(‘../message/message.html‘, "../items/message/msgCtrl"));
 7                 $routeProvider.otherwise({
 8                         redirectTo: ‘/link‘
 9                 });
10         });
11 })

主要对ngroute配置中resolve方法进行配置 ,在方法中利用requireJS加载Controller文件,通过$controllerProvider注入到angular作用域中,这样就实现 了动态加载的目的。

只能讲成这样了。。

下一篇说说ngDialog如何实现 动态加载Controller文件,实现对话框的复用。

时间: 2024-10-10 21:37:50

【实例分解二】angularjs根据路由按需加载Controller的相关文章

AngularJS中的按需加载ocLazyLoad

欢迎大家讨论与指导 : ) 初学者,有不足的地方希望各位指出 一.前言 ocLoayLoad是AngularJS的模块按需加载器.一般在小型项目里,首次加载页面就下载好所有的资源没有什么大问题.但是当我们的网站渐渐庞大起来,这样子的加载策略让网速初始化速度变得越来越慢,用户体验不好.二来,分模块加载易于团队协作,减低代码冲突. 二.按需加载的对象 各个Controller模块.Directive模块.Server模块.template模板,其实这些都是一些 .js文件或者 .html文件 .  

AngularJS 进阶(一) 按需加载controller js (转帖)

我们在AngularJS中可以根据网址不同直接切换view,动态加载网页模板,但是控制模板的控制器需要先定义好才可以,不能和网页模板同时加载,这样就造成整个网站的JS都要先加载完成. requireJS是大家第一个想到的东西,但是体积有点大,github上就有个人用它写了Angular的动态加载controller模块,是通过js promise异步编程技术实现的,最后的解决很简单~~ 首先在$routeProvider里面加resolve属性 $routeProvider. when('/ph

react-router 4.x 路由按需加载

react-router 4 代码分割(按需加载) 官方文档  https://serverless-stack.com/chapters/code-splitting-in-create-react-app.html 1.未采用路由按需加载的代码 import React from 'react'; import ReactDOM from 'react-dom'; import { Route , BrowserRouter, Switch } from 'react-router-dom'

vue学习指南:第十二篇(详细) - Vue的 路由 第二篇 ( 路由按需加载(懒加载))

各位朋友 因 最近工作繁忙,小编停更了一段时间,快过年了,小编祝愿 大家 事业有成 学业有成 快乐健康 2020开心过好每一天.从今天开始 我会抽时间把 Vue 的知识点补充完整,以及后期会带给大家更完善的知识体系!!! 路由的按需加载(懒加载) 我们都知道 vue的路由是我们必学的,也是不可分离的一部分,我们传统引入路由的方式是这样的, import Home from '@/components/home/Home' 但是在真正项目的开发中,这种现象是杜绝的,是不建议使用这种传统方式引入的.

vue项目实现路由按需加载的3种方式

vue异步组件技术 ==== 异步加载vue-router配置路由 , 使用vue的异步组件技术 , 可以实现按需加载 .但是,这种情况下一个组件生成一个js文件 /* vue异步组件技术 */ { path: '/home', name: 'home', component: resolve => require(['@/components/home'],resolve) },{ path: '/index', name: 'Index', component: resolve => re

vue项目实现路由按需加载(路由懒加载)的3种方式

为什么需要懒加载? 像vue这种单页面应用,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要加载的内容过多,时间过长,会出啊先长时间的白屏,即使做了loading也是不利于用户体验,而运用懒加载则可以将页面进行划分,需要的时候加载页面,可以有效的分担首页所承担的加载压力,减少首页加载用时 vue异步组件es提案的import()webpack的require,ensure()1 . vue异步组件技术 ==== 异步加载 vue-router配置路由 , 使用

vue中路由按需加载的几种方式

使用vue-cli构建项目后,我们会在Router文件夹下面的index.js里面引入相关的路由组件,如: import Hello from '@/components/Hello' import Boy from '@/components/Boy' import Girl from '@/components/Girl' 普通加载的缺点: webpack在打包的时候会把整个路由打包成一个js文件,如果页面一多,会导致这个文件非常大,加载缓慢 1.require.ensure()实现按需加载

React Router 按需加载+服务器渲染的闪屏问题

伴随着React协议的『妥协』(v16采用MIT),React为项目的主体,这个在短期内是不会改变的了,在平时使用过程中发现了如下这个问题: 在服务器渲染的时候,刷新页面会出现闪屏的现象(白屏一闪而过) 作为努力最求极致的我,是不能容忍的,而这一现象是半道出现的,也就是在添加按需加载之后.要说清楚这个问题,得从React的服务器渲染开始说起,(急于寻求问题解决方案的,可以直接去文章后半部分) 服务器渲染(SSR)基础原理 React的虚拟DOM是其可被用于服务端渲染的关键.其原理简单的来说就是首

react-route4 按需加载配置心得

本篇文章主要记录笔者项目中使用 react-route + webpack 做路由按需加载的心得,可能只有笔者一个人看,权当日记了. 很久很久以前,react-route还是2.X和3.X版本的时候,我们是这样做按需的: const routes = { path: '/', component: AppCom, indexRoute: { component: Admin }, childRoutes: [ { path: 'edit/:id', getComponent: (nextStat