使用ES6和systemjs.import延迟加载角度模块

时间:2015-09-17 05:32:19

标签: angularjs jspm systemjs

我正在尝试使用基本路由并延迟加载带有angular.load.I的角度解析的单独模块。我使用带有ES6模块加载器的jspm

基本路由配置就像这样

import "angular";
import "angular-ui-router";

class RouteConfig {

    constructor($stateProvider, $urlRouterProvider){
        this.stateProvider = $stateProvider;
        this.urlRouterProvider = $urlRouterProvider;

        $stateProvider
            .state("index", {
                url: "/",
                templateUrl: "/app/common/templates/home.html",
            })
            .state('order',{
                url:'/order',
                templateUrl:"/app/modules/order/templates/order.html",
                //controller:"order.controller as orderCtrl",
                resolve:{
                    load:()=>{
                        System.import('app/modules/order/order.module');
                        System.import('app/modules/order/order.controller');
                    }
                }
            });

        $urlRouterProvider.otherwise("/");
    };

    static factory($stateProvider, $urlRouterProvider){
        RouteConfig.instance = new RouteConfig($stateProvider,$urlRouterProvider);   
        return RouteConfig.instance;
    };
}

RouteConfig.factory.$inject = ['$stateProvider', '$urlRouterProvider'];

export default RouteConfig;

现在我试图根据必要的模块延迟加载控制器。 所以模块和控制器加载为

import" angular&#34 ;; import" angular-ui-router&#34 ;;

class OrderModule {

    constructor($log,$stateProvider,$urlRouterProvider){
        //$stateProvider
        //    .state('order',{

        //    })

    }

    static factory($log){
        OrderModule.instance = new OrderModule($log,$stateProvider,$urlRouterProvider);
        return OrderModule.instance;
    }
}

angular.module("order.module", ['ui.router']);
OrderModule.factory.$inject = ['$log','$stateProvider','$urlRouterProvider'];
export default  OrderModule;

和控制器

"use strict";

class OrderController {
    constructor() {
        this.order = "Please place an order";
    }
    static factory() {
        OrderController.instance = new OrderController();
        return OrderController.instance;
    }

}

angular.module('order.module').controller('Order.Controller', OrderController);

export default OrderController;

现在我正在尝试这个。这给了我错误

enter image description here

有人可以告诉你如何加载这个模块。似乎角度模块文件是通过systemjs加载的,但它没有注册角度模块。对此有何解决方案?

2 个答案:

答案 0 :(得分:0)

尝试使用:

System.import('app/modules/order/order.module')
    .then(function () {
        System.import('app/modules/order/order.controller');
    });

load() resolve

答案 1 :(得分:0)

在ES6中延迟加载jQuery的示例:

import('jquery').then((jquery) => {
   window.$ = jquery.default; // Because jquery is the module, here is the new syntax for using this

   window.$('#id');
});