TypeScript& SystemJS:angular ui路由器模块未在已编译的js中注册

时间:2016-06-17 14:54:45

标签: javascript angularjs typescript systemjs es6-module-loader

我正在编写AngularJS个应用,其中TypeScript为转发器,SystemJS用于模块加载。我尝试加载angular-ui-router模块来配置路由,但未能这样做。我收到这个错误:

  

angular.js:38未捕获错误:[$ injector:modulerr]

这是剧本:

import * as angular from "angular";
import * as router from "angular-ui-router";

const app: angular.IModule = angular.module("my.website", ["ui.router"]);
app.config((stateProvider: router.IStateProvider) => {
    ...
});

这是脚本的编译方式:

System.register(["angular"], function(exports_1, context_1) {
...

如您所见, angular-ui-router未注册,因此未加载模块。为什么?我做错了什么?

为了完整性: 这是SystemJS配置:

System.config({
    defaultJSExtensions: true,
    map: {
        "angular": "https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js",
        "angular-ui-router": "https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.3.1/angular-ui-router.min.js"
    }
});

这些是相关的TypeScript设置:

"target": "es5",
"module": "system"

我使用typings加载了TypeScript定义文件。

通过gulp-typescript进行脱毛。

任何线索?

1 个答案:

答案 0 :(得分:1)

我设法通过导入文件和模块来使其工作。尽管很丑陋,但这很有效:

import * as angular from "angular";
import "angular-ui-router";
import * as router from "angular-ui-router";

const app: angular.IModule = angular.module("my.website", ["ui.router"]);
app.config((stateProvider: router.IStateProvider) => {
    ...
});