2016-11-06 5 views
1

Я пытаюсь преобразовать приложение TypeScript Angular 1 для использования импорта модулей стиля ES6.Простой пример использования Angular 1 с TypeScript и SystemJS

капает использование имен и используя импорта ключевое слово, чтобы тянуть в модулях. например

import * as angular from "angular"; 
import * as angularroute from "angular-route"; 

Но я столкнулся с некоторыми проблемами. Я получаю сообщение об ошибке с углового:
Uncaught (обещанию) Ошибка: (SystemJS) [$ Инжектор: modulerr] Не удалось создать экземпляр модуля TestApp вследствие:
Ошибка: [$ инжектором: modulerr] Не удалось создать экземпляр модуль ngRoute из-за:
Ошибка: [$ injector: nomod] Модуль 'ngRoute' недоступен! Вы либо ошибочно написали имя модуля, либо забыли загрузить его. Если регистрации модуля убедитесь, что вы задаете зависимости в качестве второго аргумента

Чтобы проиллюстрировать эту проблему, я создал два приложение на GitHub:
1) Angular1WithNamespaces - Исходное приложение, которое я хочу, чтобы преобразовать.
2) Angular1WithSystemJS - Мое преобразование, которое имеет проблему.

Ниже приведены фрагменты из примера Angular1WithSystemJS, в котором есть проблема.

index.html

<!DOCTYPE html> 
 
<html lang="en" ng-app="testApp"> 
 
<head><base href="/"></head> 
 
<body > 
 
    <ng-view></ng-view> 
 
    <script src="node_modules/systemjs/dist/system.js"></script> 
 
    <script src="configs/systemjs.config.js"></script> 
 
    <script> 
 
     System.import('app/boot'); 
 
    </script> 
 
</body> 
 
</html>

systemjs.config.js

System.config({ 
 
    defaultJSExtensions: true, 
 

 
    paths: { 
 
    "npm:*": "../node_modules/*" 
 
    }, 
 
    // map tells the System loader where to look for things 
 
    map: { 
 
    "angular": "npm:angular/angular.js", 
 
    "angular-route": "npm:angular-route/angular-route.js", 
 
    }, 
 
    meta: { 
 
    'angular': { 
 
     format: 'global', 
 
    }, 
 
    'angular-route': { 
 
     format: 'global', 
 
    }, 
 
    } 
 
});

boot.ts

/// <reference path="../typings/tsd.d.ts" /> 
 
import * as angular from "angular"; 
 
import * as angularroute from "angular-route"; 
 

 
let main = angular.module("testApp", ["ngRoute"]); 
 

 
main.config(routeConfig) 
 

 
routeConfig.$inject = ["$routeProvider"]; 
 
function routeConfig($routeProvider: angular.route.IRouteProvider): void { 
 
    $routeProvider 
 
      .when("/dashboard", { 
 
       templateUrl: "/app/dashboard.html", 
 
      }) 
 
      .otherwise("/dashboard"); 
 
}

Любой помощь в получении этой работы был бы весьма признателен.

ответ

1

Я нашел решение, прочитав сообщение в блоге от https://legacy-to-the-edge.com/2015/01/21/using-es6-with-your-angularjs-project/

Это было связано с тем, как я сделал импорт для углового маршрута. В итоге это было всего лишь однострочное изменение.
В boot.ts Я изменил оператор импорта из:

import * as angularroute from "angular-route"; 

к:

import "angular-route"; 

Я могу только предположить, что последний будет также запускать скрипты в файле модуля.
Согласно спецификации на импорт в developer.mozilla.org

import "my-module";
Import an entire module for side effects only, without importing any bindings.

исправленная версия находится в GitHub Angular1WithSystemJSFixed

 Смежные вопросы

  • Нет связанных вопросов^_^