栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

AngularJs动态加载模块和依赖注入详解

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

AngularJs动态加载模块和依赖注入详解

废话不多说,进入正题...

首先我们看下文件结构:

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文件夹 针对demo写的js文件
    controllers    --- 页面控制器文件夹
      angular-tree-control.js   --- angular-tree-control控制器代码
      default.js  --- default控制器代码
      ng-table.js  --- ng-table控制器代码
    app.config.js   --- 模块注册及配置代码
    oclazyload.config.js      --- 加载模块配置代码
    route.config.js  --- 路由配置及加载代码
  views  --- html页面文件夹
    angular-tree-control.html    --- angular-tree-control插件的效果页面
    default.html   --- default页面
    ng-table.html   --- ng-table插件效果页面
    ui-bootstrap.html --- uibootstrap插件效果页面
  index.html      --- 主页面

注意:这个demo没做嵌套路由,只是简单实现单视图的路由以展示效果。

我们来看主页面的代码:



  
  
  
  
  
  
  
  
  



  
    主页
    ui-bootstrap
    ng-table
    angular-tree-control
  
  



在这个页面,我们只加载了bootstrap的css、angular的js、ui-router的js、ocLazyLoad的js,以及3个配置的js文件。
再看看四个页面的html代码:

angular-tree-control效果页面


  {{node.title}}

页面上有个使用该插件对应的指令。

default页面


  {{default.value}}

这里我们只是用来证明加载并正确执行default.js。

ng-table效果页面


  
    

ng-table

Sorting: {{ngtable.tableParams.sorting()|json}}

{{user.name}} {{user.age}}

这里写了些简单的ng-table效果。

ui-bootstrap效果页面


  
    下拉框触发
  
  

这里仅写了个下拉框效果,证明正确加载并使用该插件。
好了,看完了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;
 }]);

以上代码对模块的注册,仅仅依赖了ui.router和oc.LazyLoad。配置也只是简单配置了模块,以便在后面的js能识别到tempApp上的方法。
然后我们再看看ocLazyLoad加载模块的配置:

"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的下拉框简单的实现不需要控制器,那么我们就只看看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;
  //数据
  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(  // 合并默认的配置和url参数
    angular.extend({
      page: 1,      // 第一页
      count: 10,     // 每页的数据量
      sorting: {
 name: 'asc'   // 默认排序
      }
    },
    $location.search())
    ,{
      total: data.length, // 数据总数
      getdata: function ($defer, params) {
 $location.search(params.url()); // 将参数放到url上,实现刷新页面不会跳回第一页和默认配置
 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;
  //树数据
  vm.treeData = [
 {
   id:"1",
   title:"标签1",
   childList:[
     {
id:"1-1",
title:"子级1",
childList:[
  {
    id:"1-1-1",
    title:"再子级1",
    childList:[]
  }
]
     },
     {
id:"1-2",
title:"子级2",
childList:[
  {
    id:"1-2-1",
    title:"再子级2",
    childList:[
      {
 id:"1-2-1-1",
 title:"再再子级1",
 childList:[]
      }
    ]
  }
]
     },
     {
id:"1-3",
title:"子级3",
childList:[]
     }
   ]
 },
 {
   id:"2",
   title:"标签2",
   childList:[
     {
id:"2-1",
title:"子级1",
childList:[]
     },
     {
id:"2-2",
title:"子级2",
childList:[]
     },
     {
id:"2-3",
title:"子级3",
childList:[]
     }
   ]}
 ,
 {
   id:"3",
   title:"标签3",
   childList:[
     {
id:"3-1",
title:"子级1",
childList:[]
     },
     {
id:"3-2",
title:"子级2",
childList:[]
     },
     {
id:"3-3",
title:"子级3",
childList:[]
     }
   ]
 }
      ];
  //树配置
  vm.treeOptions = {
   nodeChildren:"childList",
    dirSelectable:false
  };
};
})();

让我们忽略default.js吧,毕竟里面只有个"Hello Wrold"。

以上就是本文的全部内容,希望对大家的学习有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/98861.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号