2016-09-21 2 views
0

私はこの コンポーネントでのAuthServiceを注入しようとすると、私はこのエラーを取得する: (ルータ、BackendConnectorService?):AppHeaderComponentのすべてのパラメータを解決できません。システムJS依存関係ロード順

import { Router } from '@angular/router'; 
import { Component, ViewEncapsulation, EventEmitter, Input, Output, Inject } from '@angular/core'; 

import { StoreService, BackendConnectorService, AuthService } from "@app/services"; 
console.log(AuthService); 
@Component({ 
    moduleId: module.id, 
    selector: 'app-header', 
    templateUrl: './app-header.component.html', 
    styleUrls: ['./app-header.component.css'], 
    encapsulation: ViewEncapsulation.None 
}) 

export class AppHeaderComponent { 
    constructor(private router:Router, private authService: AuthService, private backendConnectorService: BackendConnectorService) { } 
} 

私は、サービスを含む コンポーネントと@アプリ/サービスが含まれているアプリ/共有@作成した2つの内部モジュールは、アプリ@/ はサービスに依存している共有しています。私は、システムが が共有する前にサービスがロードされなければならないことを知っていないと仮定AppHeaderComponentは@アプリに保存されている /

を共有している私のシステムjsの設定は、この

(function (global) { 
    // setup environment which will affect angular2 providers 
    if (!window) { 
    window = {}; 
    } 
    window.ENV = 'development' 
    // map tells the System loader where to look for things 
    var appMainSrcFolder = 'dist'; 

    var map = { 
    //application internal 

    'src': appMainSrcFolder, // 'dist', 
    '@app': appMainSrcFolder + '/app', 
    '@app/services': appMainSrcFolder + '/app/shared/services', 
    '@app/shared': appMainSrcFolder + '/app/shared', 
    '@app/pipes': appMainSrcFolder + '/app/shared/pipes', 

    '@vaadin': 'node_modules/@vaadin', 
    '@angular': 'node_modules/@angular', 
    '@angular2-material': 'node_modules/@angular2-material', 
    'angular2-in-memory-web-api': 'node_modules/angular2-in-memory-web-api', 
    'rxjs': 'node_modules/rxjs', 
    'ag-grid-ng2': 'node_modules/ag-grid-ng2', 
    'ag-grid': 'node_modules/ag-grid', 
    'angular2-tree-component': 'node_modules/angular2-tree-component', 
    'lodash':      'node_modules/lodash', 
    'infinite-scroll': 'node_modules/angular2-infinite-scroll' 
    }; 
    // packages tells the System loader how to load when no filename and/or no extension 
    var packages = { 
    'src': { main: 'main', defaultExtension: 'js' }, 
    'rxjs': { defaultExtension: 'js' }, 
    'angular2-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' }, 
    'lib': { format: 'register', defaultExtension: 'js' }, 
    'ag-grid-ng2': { defaultExtension: "js" }, 
    'ag-grid': { defaultExtension: "js" }, 
    '@vaadin/angular2-polymer': { main: 'index.js', defaultExtension: 'js' }, 

    // map application internal packages 
    '@app': { main: 'index.js', defaultExtension: 'js' }, 
    '@app/services': { main: 'index.js', defaultExtension: 'js', meta: { format: 'cjs' } }, 
    '@app/shared': { main: 'index.js', defaultExtension: 'js', meta: { 
     format: 'cjs', 
     deps:[ 
      '@app/services', 
      '@app/pipes' 
     ] 
    }}, 
    '@app/pipes': { main: 'index.js', defaultExtension: 'js', format: 'cjs' }, 
    'angular2-tree-component' : { main: 'dist/angular2-tree-component.js', defaultExtension: 'js' }, 
    'lodash'     : { main: 'lodash.js', defaultExtension: 'js' }, 

    'infinite-scroll': { main: "angular2-infinite-scroll.js", defaultExtension: "js" } 
    }; 

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

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

    // Individual files (~300 requests): 
    function packIndex(bundleName, pkgName) { 
    packages[bundleName + '/' + pkgName] = { main: 'index.js', defaultExtension: 'js' }; 
    } 

    // Bundled (~40 requests): 
    function packUmd(bundleName, pkgName) { 
    packages[bundleName + '/' + pkgName] = { main: '/bundles/' + pkgName + '.umd.js', defaultExtension: 'js' }; 
    } 

    // Most environments should use UMD; some (Karma) need the individual index files 
    // Add package entries for angular packages 
    ngPackageNames.forEach(function (pkgName) { 
    System.packageWithIndex ? packIndex('@angular', pkgName) : packUmd('@angular', pkgName); 
    }); 

    // Add package entries for angular material packages 
    ng2MaterialPackageNames.forEach(function (pkgName) { 
    packages['@angular2-material/' + pkgName] = { 
     defaultExtension: 'js', 
     main: pkgName + '.js' 
    } 
    }); 

    var config = { 
    map: map, 
    packages: packages, 
    meta: { 
     '/shared/*': { 
     format: 'cjs', 
     deps:[ 
      'dist/app/services/index' 
     ] 
     } 
    } 
    }; 
    System.config(config); 
})(this); 

ようになっていることに言及しますこの問題は、 がStoreServiceとBackendConnectorServiceに依存するAuthServiceを導入したときに表示されました。 私のパッケージ間でこの問題を解決するにはどうすればよいですか?私は システム上のメタオブジェクトにしようとしたのjsが、私が私が循環参照を作成した「アプリ/共有@」 から輸入していたのAuthServiceファイルに問題を発見した

+0

モジュールの 'providers'宣言にあなたの' AuthService'を宣言しましたか? – ranakrunal9

+0

メインコンポーネントプロバイダでglobalyと宣言されています – Nicu

+0

AppHeaderComponentにコンソールログがあり、コンソールログに未定義のログが記録されますが、コンストラクタparametresからそのログを削除すると、コンポーネントコンストラクタ内でAuthServiceタイプのオブジェクトをインスタンス化しようとしますその時点で、AuthServiceクラスが定義されます。だからこそ、私は問題がパッケージの読み込みにあると思います。なぜなら、@ app/sharedモジュールの一部ではない別のコンポーネントにAuthServiceを注入することができるからです。 – Nicu

答えて

1

を動作するようには思えません。