AngularJs動(dòng)態(tài)加載模塊和依賴注入詳解
廢話不多說(shuō),進(jìn)入正題...
首先我們看下文件結(jié)構(gòu):
Angular-ocLazyLoad --- demo文件夾
Scripts --- 框架及插件文件夾
angular-1.4.7 --- angular 不解釋
angular-ui-router --- uirouter 不解釋
oclazyload --- ocLazyload 不解釋
bootstrap --- bootstrap 不解釋
angular-tree-control-master --- angular-tree-control-master 不解釋
ng-table --- ng-table 不解釋
angular-bootstrap --- angular-bootstrap 不解釋
js --- js文件夾 針對(duì)demo寫的js文件
controllers --- 頁(yè)面控制器文件夾
angular-tree-control.js --- angular-tree-control控制器代碼
default.js --- default控制器代碼
ng-table.js --- ng-table控制器代碼
app.config.js --- 模塊注冊(cè)及配置代碼
oclazyload.config.js --- 加載模塊配置代碼
route.config.js --- 路由配置及加載代碼
views --- html頁(yè)面文件夾
angular-tree-control.html --- angular-tree-control插件的效果頁(yè)面
default.html --- default頁(yè)面
ng-table.html --- ng-table插件效果頁(yè)面
ui-bootstrap.html --- uibootstrap插件效果頁(yè)面
index.html --- 主頁(yè)面
注意:這個(gè)demo沒(méi)做嵌套路由,只是簡(jiǎn)單實(shí)現(xiàn)單視圖的路由以展示效果。
我們來(lái)看主頁(yè)面的代碼:
<html>
<head>
<meta charset="utf-8" />
<title></title>
<link rel="stylesheet" href="Scripts/bootstrap/dist/css/bootstrap.min.css" />
<script src="Scripts/angular-1.4.7/angular.js"></script>
<script src="Scripts/angular-ui-router/release/angular-ui-router.min.js"></script>
<script src="Scripts/oclazyload/dist/ocLazyLoad.min.js"></script>
<script src="js/app.config.js"></script>
<script src="js/oclazyload.config.js"></script>
<script src="js/route.config.js"></script>
</head>
<body>
<div ng-app="templateApp">
<div>
<a href="#/default">主頁(yè)</a>
<a href="#/uibootstrap" >ui-bootstrap</a>
<a href="#/ngtable">ng-table</a>
<a href="#/ngtree">angular-tree-control</a>
</div>
<div ui-view></div>
</div>
</body>
</html>
在這個(gè)頁(yè)面,我們只加載了bootstrap的css、angular的js、ui-router的js、ocLazyLoad的js,以及3個(gè)配置的js文件。
再看看四個(gè)頁(yè)面的html代碼:
angular-tree-control效果頁(yè)面
<treecontrol tree-model="ngtree.treeData" class="tree-classic ng-cloak" options="ngtree.treeOptions">
{{node.title}}
</treecontrol>
頁(yè)面上有個(gè)使用該插件對(duì)應(yīng)的指令。
default頁(yè)面
<div class="ng-cloak">
{{default.value}}
</div>
這里我們只是用來(lái)證明加載并正確執(zhí)行default.js。
ng-table效果頁(yè)面
<div class="ng-cloak">
<div class="p-h-md p-v bg-white box-shadow pos-rlt">
<h3 class="no-margin">ng-table</h3>
</div>
<button ng-click="ngtable.tableParams.sorting({})" class="btn btn-default pull-right">Clear sorting</button>
<p>
<strong>Sorting:</strong> {{ngtable.tableParams.sorting()|json}}
</p>
<table ng-table="ngtable.tableParams" class="table table-bordered table-striped">
<tr ng-repeat="user in $data">
<td data-title="'Name'" sortable="'name'">
{{user.name}}
</td>
<td data-title="'Age'" sortable="'age'">
{{user.age}}
</td>
</tr>
</table>
</div>
這里寫了些簡(jiǎn)單的ng-table效果。
ui-bootstrap效果頁(yè)面
<span uib-dropdown class="ng-cloak">
<a href id="simple-dropdown" uib-dropdown-toggle>
下拉框觸發(fā)
</a>
<ul class="uib-dropdown-menu dropdown-menu" aria-labelledby="simple-dropdown">
下拉框內(nèi)容.這里寫個(gè)效果證明實(shí)現(xiàn)動(dòng)態(tài)加載即可
</ul>
</span>
這里僅寫了個(gè)下拉框效果,證明正確加載并使用該插件。
好了,看完了html,我們看下加載配置和路由配置:
"use strict"
var tempApp = angular.module("templateApp",["ui.router","oc.lazyLoad"])
.config(["$provide","$compileProvider","$controllerProvider","$filterProvider",
function($provide,$compileProvider,$controllerProvider,$filterProvider){
tempApp.controller = $controllerProvider.register;
tempApp.directive = $compileProvider.register;
tempApp.filter = $filterProvider.register;
tempApp.factory = $provide.factory;
tempApp.service =$provide.service;
tempApp.constant = $provide.constant;
}]);
以上代碼對(duì)模塊的注冊(cè),僅僅依賴了ui.router和oc.LazyLoad。配置也只是簡(jiǎn)單配置了模塊,以便在后面的js能識(shí)別到tempApp上的方法。
然后我們?cè)倏纯磑cLazyLoad加載模塊的配置:
"use strict"
tempApp
.constant("Modules_Config",[
{
name:"ngTable",
module:true,
files:[
"Scripts/ng-table/dist/ng-table.min.css",
"Scripts/ng-table/dist/ng-table.min.js"
]
},
{
name:"ui.bootstrap",
module:true,
files:[
"Scripts/angular-bootstrap/ui-bootstrap-tpls-0.14.3.min.js"
]
},
{
name:"treeControl",
module:true,
files:[
"Scripts/angular-tree-control-master/css/tree-control.css",
"Scripts/angular-tree-control-master/css/tree-control-attribute.css",
"Scripts/angular-tree-control-master/angular-tree-control.js"
]
}
])
.config(["$ocLazyLoadProvider","Modules_Config",routeFn]);
function routeFn($ocLazyLoadProvider,Modules_Config){
$ocLazyLoadProvider.config({
debug:false,
events:false,
modules:Modules_Config
});
};
路由的配置:
"use strict"
tempApp.config(["$stateProvider","$urlRouterProvider","$locationProvider",routeFn]);
function routeFn($stateProvider,$urlRouterProvider,$locationProvider){
$urlRouterProvider.otherwise("/default");
$stateProvider
.state("default",{
url:"/default",
views:{
"":{
templateUrl:"views/default.html",
controller:"defaultCtrl",
controllerAs:"default"
}
},
resolve:{
deps:["$ocLazyLoad",function($ocLazyLoad){
return $ocLazyLoad.load("js/controllers/default.js");
}]
}
})
.state("uibootstrap",{
url:"/uibootstrap",
views:{
"":{
templateUrl:"views/ui-bootstrap.html"
}
},
resolve:{
deps:["$ocLazyLoad",function($ocLazyLoad){
return $ocLazyLoad.load("ui.bootstrap");
}]
}
})
.state("ngtable",{
url:"/ngtable",
views:{
"":{
templateUrl:"views/ng-table.html",
controller:"ngTableCtrl",
controllerAs:"ngtable"
}
},
resolve:{
deps:["$ocLazyLoad",function($ocLazyLoad){
return $ocLazyLoad.load("ngTable").then(
function(){
return $ocLazyLoad.load("js/controllers/ng-table.js");
}
);
}]
}
})
.state("ngtree",{
url:"/ngtree",
views:{
"":{
templateUrl:"views/angular-tree-control.html",
controller:"ngTreeCtrl",
controllerAs:"ngtree"
}
},
resolve:{
deps:["$ocLazyLoad",function($ocLazyLoad){
return $ocLazyLoad.load("treeControl").then(
function(){
return $ocLazyLoad.load("js/controllers/angular-tree-control.js");
}
);
}]
}
})
};
ui-bootstrap的下拉框簡(jiǎn)單的實(shí)現(xiàn)不需要控制器,那么我們就只看看ng-table和angular-tree-control的控制器js吧:
ng-table.js
(function(){
"use strict"
tempApp
.controller("ngTableCtrl",["$location","NgTableParams","$filter",ngTableCtrlFn]);
function ngTableCtrlFn($location,NgTableParams,$filter){
var vm = this;
//數(shù)據(jù)
var data = [{ name: "Moroni", age: 50 },
{ name: "Tiancum ", age: 43 },
{ name: "Jacob", age: 27 },
{ name: "Nephi", age: 29 },
{ name: "Enos", age: 34 },
{ name: "Tiancum", age: 43 },
{ name: "Jacob", age: 27 },
{ name: "Nephi", age: 29 },
{ name: "Enos", age: 34 },
{ name: "Tiancum", age: 43 },
{ name: "Jacob", age: 27 },
{ name: "Nephi", age: 29 },
{ name: "Enos", age: 34 },
{ name: "Tiancum", age: 43 },
{ name: "Jacob", age: 27 },
{ name: "Nephi", age: 29 },
{ name: "Enos", age: 34 }];
vm.tableParams = new NgTableParams( // 合并默認(rèn)的配置和url參數(shù)
angular.extend({
page: 1, // 第一頁(yè)
count: 10, // 每頁(yè)的數(shù)據(jù)量
sorting: {
name: 'asc' // 默認(rèn)排序
}
},
$location.search())
,{
total: data.length, // 數(shù)據(jù)總數(shù)
getData: function ($defer, params) {
$location.search(params.url()); // 將參數(shù)放到url上,實(shí)現(xiàn)刷新頁(yè)面不會(huì)跳回第一頁(yè)和默認(rèn)配置
var orderedData = params.sorting ?
$filter('orderBy')(data, params.orderBy()) :data;
$defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));
}
}
);
};
})();
angular-tree-control.js
(function(){
"use strict"
tempApp
.controller("ngTreeCtrl",ngTreeCtrlFn);
function ngTreeCtrlFn(){
var vm = this;
//樹數(shù)據(jù)
vm.treeData = [
{
id:"1",
title:"標(biāo)簽1",
childList:[
{
id:"1-1",
title:"子級(jí)1",
childList:[
{
id:"1-1-1",
title:"再子級(jí)1",
childList:[]
}
]
},
{
id:"1-2",
title:"子級(jí)2",
childList:[
{
id:"1-2-1",
title:"再子級(jí)2",
childList:[
{
id:"1-2-1-1",
title:"再再子級(jí)1",
childList:[]
}
]
}
]
},
{
id:"1-3",
title:"子級(jí)3",
childList:[]
}
]
},
{
id:"2",
title:"標(biāo)簽2",
childList:[
{
id:"2-1",
title:"子級(jí)1",
childList:[]
},
{
id:"2-2",
title:"子級(jí)2",
childList:[]
},
{
id:"2-3",
title:"子級(jí)3",
childList:[]
}
]}
,
{
id:"3",
title:"標(biāo)簽3",
childList:[
{
id:"3-1",
title:"子級(jí)1",
childList:[]
},
{
id:"3-2",
title:"子級(jí)2",
childList:[]
},
{
id:"3-3",
title:"子級(jí)3",
childList:[]
}
]
}
];
//樹配置
vm.treeOptions = {
nodeChildren:"childList",
dirSelectable:false
};
};
})();
讓我們忽略default.js吧,畢竟里面只有個(gè)"Hello Wrold"。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
相關(guān)文章
Angular CLI在Angular項(xiàng)目中如何使用scss詳解
angular-cli自身支持Scss預(yù)處理器,Scss比css更加方便靈活,而且層次清晰,代碼整潔。下面這篇文章主要給大家介紹了關(guān)于Angular CLI在Angular項(xiàng)目中如何使用scss的相關(guān)資料,需要的朋友可以參考下。2018-04-04
Angularjs中date過(guò)濾器失效的問(wèn)題及解決方法
這篇文章主要介紹了Angularjs中date過(guò)濾器失效的問(wèn)題及解決方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07
Angular5整合富文本編輯器TinyMCE的方法(漢化+上傳)
TinyMCE是一個(gè)輕量級(jí)的富文本編輯器,相對(duì)于CK編輯器更加精簡(jiǎn),但必須滿足絕大部分場(chǎng)景的需要。這篇文章主要介紹了Angular5整合富文本編輯器TinyMCE(漢化+上傳)的相關(guān)知識(shí),需要的朋友可以參考下2020-05-05
AngularJS 將再發(fā)布一個(gè)重要版本 然后進(jìn)入長(zhǎng)期支持階段
目前團(tuán)隊(duì)正在開發(fā) AngularJS 1.7.0,而 1.7 的開發(fā)周期將一直持續(xù)到 2018 年 6 月 30 日2018-01-01
Angular項(xiàng)目中$scope.$apply()方法的使用詳解
這篇文章主要給大家介紹了關(guān)于Angular項(xiàng)目中$scope.$apply()方法使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Angularjs具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)看看吧。2017-07-07
詳解Angular 中 ngOnInit 和 constructor 使用場(chǎng)景
最初學(xué)習(xí)Angular的時(shí)候總是搞不清楚ngOnInit和constructor的區(qū)別,現(xiàn)在我們來(lái)稍微理一下兩者之間的區(qū)別。2017-06-06
AngularJS實(shí)現(xiàn)的簡(jiǎn)單拖拽功能示例
這篇文章主要介紹了AngularJS實(shí)現(xiàn)的簡(jiǎn)單拖拽功能,涉及AngularJS事件響應(yīng)及頁(yè)面元素屬性動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-01-01

