博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【实例分解二】angularjs根据路由按需加载Controller
阅读量:5295 次
发布时间:2019-06-14

本文共 3129 字,大约阅读时间需要 10 分钟。

开始笔记之前,把早上检测到的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: config38         }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文件,实现对话框的复用。

转载于:https://www.cnblogs.com/18th-Inn/p/4563186.html

你可能感兴趣的文章
django 学习笔记(转)
查看>>
控制台程序秒变Windows服务(Topshelf)
查看>>
字节流与字符流的区别详解
查看>>
20141026--娱乐-箱子
查看>>
自定义分页
查看>>
Oracle事务
查看>>
任意输入10个int类型数据,把这10个数据首先按照排序输出,挑出这些数据里面的素数...
查看>>
String类中的equals方法总结(转载)
查看>>
图片问题
查看>>
bash使用规则
查看>>
AVL数
查看>>
第二章练习
查看>>
ajax2.0
查看>>
C#时间截
查看>>
C语言程序设计II—第九周教学
查看>>
全栈12期的崛起之捡点儿有用的说说
查看>>
基础类型
查看>>
属性动画
查看>>
标识符
查看>>
Sqli labs系列-less-4 这关好坑!!!
查看>>