Angular 2 RC 6 Материал 2 Alpha 8 Не работает

Недавно я обновил свой проект до Angular 2 RC 6 и Material 2.0.0-alpha.8-1, но он не работает, может ли кто-нибудь указать, что мне здесь не хватает? Кто-нибудь может поделиться рабочим плунжером с Angular 2 RC 6 и Material 2.0.0-alpha.8-1?

У меня есть пакеты ниже в моем package.json:

"@angular2-material/button": "2.0.0-alpha.8-1",
"@angular2-material/button-toggle": "2.0.0-alpha.8-1",
"@angular2-material/card": "2.0.0-alpha.8-1",
"@angular2-material/checkbox": "2.0.0-alpha.8-1",
"@angular2-material/core": "2.0.0-alpha.8-1",
"@angular2-material/grid-list": "2.0.0-alpha.8-1",
"@angular2-material/icon": "2.0.0-alpha.8-1",
"@angular2-material/input": "2.0.0-alpha.8-1",
"@angular2-material/list": "2.0.0-alpha.8-1",
"@angular2-material/menu": "2.0.0-alpha.8-1",
"@angular2-material/progress-bar": "2.0.0-alpha.8-1",
"@angular2-material/progress-circle": "2.0.0-alpha.8-1",
"@angular2-material/radio": "2.0.0-alpha.8-1",
"@angular2-material/sidenav": "2.0.0-alpha.8-1",
"@angular2-material/slider": "2.0.0-alpha.8-1",
"@angular2-material/slide-toggle": "2.0.0-alpha.8-1",
"@angular2-material/tabs": "2.0.0-alpha.8-1",
"@angular2-material/toolbar": "2.0.0-alpha.8-1",
"@angular2-material/tooltip": "2.0.0-alpha.8-1",

в AppModule я сначала импортировал следующие необходимые модули:

import { MdCoreModule } from '@angular2-material/core/core';
import { MdCheckboxModule } from '@angular2-material/checkbox/checkbox';
import { MdProgressBarModule } from '@angular2-material/progress-bar/progress-bar';
import { MdRadioModule, MdUniqueSelectionDispatcher } from '@angular2-material/radio/radio';
import { MdSlideToggleModule } from '@angular2-material/slide-toggle/slide-toggle';
import { MdTabsModule } from '@angular2-material/tabs/tabs';

затем добавил ниже в список импорта:

imports: [
    ....
    // Material Design
    MdCoreModule.forRoot(),
    MdCheckboxModule.forRoot(),
    MdRadioModule.forRoot(),
    MdSlideToggleModule.forRoot(),
    MdTabsModule.forRoot(),
    MdProgressBarModule.forRoot(),
    ....
],

в Провайдерах:

providers: [
        MdUniqueSelectionDispatcher
]

В моем файле конфигурации SystemJs у меня есть:

var map = {
    '@angular': 'node_modules/@angular',
    '@angular2-material': 'node_modules/@angular2-material',

    'rxjs': 'node_modules/rxjs',

    'app': 'content/app',
    "angular2-masonry": "node_modules/angular2-masonry"
}; 

var paths = {
        "masonry-layout": "node_modules/masonry-layout/dist/masonry.pkgd.js"
    };

var packages = {
        'app': { main: 'main.js', defaultExtension: 'js' },
        'rxjs': { defaultExtension: 'js' },
        'angular2-masonry': { defaultExtension: 'js', main: "index" }
    };


var angularPackages = [
    'common',
    'compiler',
    'core',
    'http',
    'platform-browser',
    'platform-browser-dynamic',
    'router',
    'forms'
];

angularPackages.forEach(function (name) {
    packages['@angular/' + name] = {
        format: 'cjs',
        main: 'bundles/' + name + '.umd.js', defaultExtension: 'js'
    };
});

var materialComponents = [
        'core',
        'button',
        'card',
        'checkbox',
        'grid-list',
        'icon',
        'input',
        'list',
        'progress-bar',
        'progress-circle',
        'radio',
        'sidenav',
        'slide-toggle',
        'tabs',
        'toolbar'
    ];

    materialComponents.forEach(function (name) {
        packages[("@angular2-material/" + name)] = {
            format: 'cjs',
            main: name + '.umd.js',
            defaultExtension: 'js'
        };
    });

    var config = {
        map: map,
        packages: packages,
        paths: paths
    };

    System.config(config);

Ниже приведено сообщение об ошибке, отображаемое на консоли, когда я запускаю свои приложения:

43 Error: SyntaxError: Unexpected token import
at Object.eval (http://localhost:57196/content/app/app.module.js:16:14)
at eval (http://localhost:57196/content/app/app.module.js:328:4)
at eval (http://localhost:57196/content/app/app.module.js:329:3)
Evaluating http://localhost:57196/node_modules/@angular2-material/core/core.js
Evaluating http://localhost:57196/content/app/app.module.js
Evaluating http://localhost:57196/content/app/main.js
Error loading http://localhost:57196/content/app/main.js

person Naveed Ahmed    schedule 05.09.2016    source источник
comment
Не могли бы вы уточнить, что он не работает?   -  person Günter Zöchbauer    schedule 05.09.2016
comment
@Günter Я обновил вопрос и добавил сообщение об ошибке в конце вопроса, пожалуйста, посмотрите.   -  person Naveed Ahmed    schedule 05.09.2016
comment
У меня такая же проблема... как решить?   -  person Jalal El-Shaer    schedule 06.09.2016


Ответы (2)


Исправлено! Если кто-то все еще пытается заставить Angular 2 RC 6 Material 2 Alpha 8 работать в вашем проекте, приведенная ниже конфигурация может сработать.

Ниже показан мой файл конфигурации SystemJS

(function (global) {
    var map = {
        //angular
        '@angular': 'node_modules/@angular',
        '@angular2-material': 'node_modules/@angular2-material',
        'rxjs': 'node_modules/rxjs',

        'app': 'content/app',

        //thirdparty
        "angular2-masonry": "node_modules/angular2-masonry",
    };

    var paths = {
        "masonry-layout": "node_modules/masonry-layout/dist/masonry.pkgd.js"
    };

    var packages = {
        'app': { main: 'main.js', defaultExtension: 'js' },
        'rxjs': { defaultExtension: 'js' },
        "angular2-masonry": { defaultExtension: 'js', main: "index" }
    };

    var angularPackages = [
        'common',
        'compiler',
        'core',
        'http',
        'platform-browser',
        'platform-browser-dynamic',
        'router',
        'forms'
    ];

    angularPackages.forEach(function (name) {
        packages['@angular/' + name] = {
            format: 'cjs',
            main: 'bundles/' + name + '.umd.js',
            defaultExtension: 'js'
        };
    });

    var materialComponents = [
        'checkbox',
        'core',
        'progress-bar',
        'progress-circle',
        'radio',
        'sidenav',
        'slide-toggle',
        'tabs'
    ];

    materialComponents.forEach(function (name) {
        packages[("@angular2-material/" + name)] = {
            format: 'cjs',
            main: name + '.umd.js',
            defaultExtension: 'js'
        };
    });

    var config = {
        map: map,
        packages: packages,
        paths: paths
    };

    System.config(config);

})(this);

AppModule

Импорт

//angular
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { Http, XHRBackend, HttpModule, RequestOptions, JsonpModule } from '@angular/http';
import { NgModule } from '@angular/core';

//material
import { MdCheckboxModule } from '@angular2-material/checkbox';
import { MdProgressBarModule } from '@angular2-material/progress-bar';
import { MdRadioModule, MdUniqueSelectionDispatcher } from '@angular2-material/radio';
import { MdSlideToggleModule } from '@angular2-material/slide-toggle';
import { MdTabsModule } from '@angular2-material/tabs';

Импорт в NgModule

@NgModule({
    imports: [
        //angular
        BrowserModule,
        FormsModule,
        HttpModule,
        JsonpModule,
        ReactiveFormsModule,
        routing,

        //material
        MdCheckboxModule.forRoot(),
        MdRadioModule.forRoot(),
        MdSlideToggleModule.forRoot(),
        MdTabsModule.forRoot(),
        MdProgressBarModule.forRoot(),
        MdProgressBarModule.forRoot()
//.....
    ],

Если вы используете Радио

providers: [
        MdUniqueSelectionDispatcher
]
person Naveed Ahmed    schedule 07.09.2016
comment
что было большим изменением? - person nadav; 08.09.2016
comment
Пожалуйста, взгляните на импорт в начале AppModule. Например, @angular2-material//checkbox/checkbox должен быть @angular2-material/checkbox. - person Naveed Ahmed; 08.09.2016
comment
это всегда было @angular2-material/checkbox .. по крайней мере, в обычном порядке - person nadav; 08.09.2016
comment
До RC 6 мне приходилось использовать @angular2-material/checkbox/checkbox, но теперь просто @angular2-material/checkbox - person Naveed Ahmed; 09.09.2016
comment
Есть ли другие серьезные изменения в RC6? @НавидАхмед - person Omer; 10.09.2016
comment
Облаков может быть много, в зависимости от того, с какой версии вы обновляетесь. Пожалуйста, просмотрите полный журнал изменений github.com/angular/angular/blob/master/ . Одним из основных, конечно же, является удаление устаревших Component.directives и Component.pipes. - person Naveed Ahmed; 10.09.2016

Я использую Материал 2 вместе с «официальным» файлом systemjs.config.js и не могу заставить его работать с бочками .js.

Поэтому я пошел дальше и сопоставил их с файлами .umd, например.

map: {
    ...
'@angular2-material/button':  'npm:@angular2-material/button/button.umd.js',
'@angular2-material/card':    'npm:@angular2-material/card/card.umd.js',
'@angular2-material/checkbox':    'npm:@angular2-material/checkbox/checkbox.umd.js',
    ...
}

и удалил соответствующие записи в разделе packages. Это помогло мне.

person Thorsten Westheider    schedule 10.09.2016