English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Chargement dynamique des modules et des dépendances AngularJs

Le projet est très occupé récemment, il faut travailler pendant la journée et faire des présentations PowerPoint sur les points de savoir Angular pour les collègues le soir. Après tout, je vais démissionner à la fin de l'année, et la développement ultérieur du projet doit être pris en charge par quelqu'un d'autre, donc j'ai utilisé le temps d'apprentissage le soir. J'avais initialement l'intention de ne pas écrire de notes d'apprentissage sur ces plugins tiers, mais je pense que charger les modules à la demande et les utiliser avec succès est vraiment un bon point, donc je l'ai enregistré. Comme je n'ai pas utilisé profondément requireJs, je ne sais pas quelle est la différence entre cela et requireJs, et je ne peux pas expliquer clairement s'il s'agit vraiment de la charge à la demande d'Angular.

Pour réaliser l'effet des points de savoir de cette note d'apprentissage, nous devons utiliser :

angular:https://github.com/angular/angular.js

ui-router:https://github.com/angular-ui/ui-router

ocLazyLoad:https://github.com/ocombe/ocLazyLoad

Ne pas perdre de temps, entrer dans le sujet principal...

Tout d'abord, regardons la structure des fichiers :

Angular-ocLazyLoad           --- Dossier demo
  Scripts               --- Dossier du cadre et du plugin
    angular-1.4.7          --- angular n'a pas besoin d'explication
    angular-ui-router        --- uirouter n'a pas besoin d'explication
    oclazyload           --- ocLazyload n'a pas besoin d'explication
    bootstrap            --- bootstrap n'a pas besoin d'explication
    angular-tree-control-master   --- angular-tree-control-master n'a pas besoin d'explication
    ng-table            --- ng-table n'a pas besoin d'explication
    angular-bootstrap        --- angular-bootstrap n'a pas besoin d'explication
  js                 --- Dossier js pour le demo écrit js
    controllers           --- Dossier du contrôleur de page
      angular-tree-control.js   --- angular-tree-Code du contrôleur control
      default.js         --- Code du contrôleur default
      ng-table.js         --- ng-Code du contrôleur table
    app.config.js          --- Code d'enregistrement et de configuration du module
    oclazyload.config.js      --- Code de configuration du module de chargement
    route.config.js         --- Configuration du routing et du code de chargement
  views                --- Dossier de page html
    angular-tree-control.html    --- angular-tree-Page d'effet du plugin control
    default.html          --- default page
    ng-table.html          --- ng-Page d'effet du plugin table
    ui-bootstrap.html        --- Page d'effet du plugin uibootstrap
  index.html             --- Page principale

Attention : ce demo n'a pas de routing imbriqué, il ne s'agit que d'une simple implémentation de routing de vue unique pour montrer l'effet.

Regardons le code de la page d'accueil :

<!DOCTYPE html>
<html lang="fr" xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta charset="utf-8"-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">page d'accueil</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>

On this page, we only loaded bootstrap's css, angular's js, ui-router's js, ocLazyLoad's js, and3js files configured.

Let's take a look at the HTML code of the four pages:

angular-tree-control page

<treecontrol tree-model="ngtree.treeData" class="tree"-classic ng-cloak" options="ngtree.treeOptions">
   {{node.title}}
 </treecontrol>

There is a directive corresponding to the plugin on the page.

default page

<div class="ng"-cloak">
   {{default.value}}
 </div>

We just use it to prove that default.js is loaded and executed correctly.

ng-page with table effects

<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>/button>
  <p>
    <strong>Sorting:</strong>/<strong> {{ngtable.tableParams.sorting()|json}}</strong>
  </p>
  <table ng-table="ngtable.tableParams" class="table table"-bordered table-striped">
    <tr ng-repeat="user in $data">
      <td data-title="[#1#]" sortable="'name'">
        {{user.name}}
      </td>
      <td data-title="[#2#]" sortable="'age'">
        {{user.age}}
      </td>
    </tr>
  </table>
</div>

Here are some simple ng-table effects.

ui-page with bootstrap effects

<span uib"-dropdown class="ng"-cloak">
   <a href id="simple"}}-dropdown" uib-dropdown-toggle>
     Déclencheur de la liste déroulante
   </a>
   <ul class="uib-dropdown-menu dropdown-menu" aria-labelledby="simple-dropdown">
     Contenu de la liste déroulante. Ici, écrivons un effet pour prouver que le chargement dynamique est mis en œuvre.
   </ul>
 </span>

Ici, il n'est écrit qu'un effet de liste déroulante pour prouver que le plugin est correctement chargé et utilisé.

Bien, après avoir regardé l'html, regardons la configuration de chargement et la configuration de routage :

"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.directive;
          tempApp.filter = $filterProvider.register;
          tempApp.factory = $provide.factory;
          tempApp.service = $provide.service;
          tempApp.constant = $provide.constant;
        ]);

Le code ci-dessus pour l'enregistrement du module dépend uniquement de ui.router et oc.LazyLoad. La configuration ne fait que configurer simplement le module, afin que les méthodes sur tempApp puissent être reconnues dans les js ultérieurs.

Puis, regardons la configuration de chargement des modules 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\",routeFn]);
function routeFn($stateProvider,$urlRouterProvider){
  $urlRouterProvider.otherwise("/default\
  $stateProvider
  .state(\"default\",{
    url:\"/default\",
    templateUrl:\"views\/default.html\",
    controller:\"defaultCtrl\",
    controllerAs:\"default\",
    resolve:{
      deps:["$ocLazyLoad",function($ocLazyLoad){
        return $ocLazyLoad.load("js/controllers/default.js\
      }]
    } 
  })
  .state(\"uibootstrap\",{
    url:\"/uibootstrap\",
    templateUrl:\"views\/ui-bootstrap.html\",
    resolve:{
      deps:["$ocLazyLoad",function($ocLazyLoad){
        return $ocLazyLoad.load(\"ui.bootstrap\");
      }]
    } 
  })
  .state(\"ngtable\",{
    url:\"/ngtable\",
    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\",
    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-Pour une implémentation simple du menu déroulant de bootstrap sans contrôleur, regardons ng-Table et angular-tree-Controlleur js pour :

ng-table.js

(function(){
"use strict"
tempApp
.controller("ngTableCtrl",["$location","NgTableParams","$filter",ngTableCtrlFn]);
function ngTableCtrlFn($location,NgTableParams,$filter){
  //Données
  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 )];
  this.tableParams = new NgTableParams(  // Fusionner la configuration par défaut et les paramètres de l'URL
    angular.extend({
      page: 1,      // Première page
      count: 10,     // Nombre de données par page
      sorting: {
        name: 'asc'   // Tri par défaut
      }
    },
    $location.search())
    ,{
      total: data.length, // Nombre total des données
      getData: function ($defer, params) {
        $location.search(params.url()); // Mettre les paramètres dans l'URL pour éviter de revenir à la première page et la configuration par défaut lors du rafraîchissement de la page
        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(){
  //树数据
  this.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:[]
            }
          ]
        }
      ];
  //树配置
  this.treeOptions = {
    nodeChildren:"childList",
    dirSelectable:false
  };
};
})();

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

github url : https://github.com/Program-Monkey/Angular-ocLazyLoad-Demo

以上就是对AngularJS动态加载模块和依赖的资料整理,后续将继续补充相关资料,谢谢大家对本站的支持!

声明:本文内容来源于网络,版权归原作者所有。内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#oldtoolbag.com(在发送邮件时,请将#更换为@进行举报,并提供相关证据。一经查实,本站将立即删除涉嫌侵权内容。)

Vous pourriez aussi aimer