web-dev-qa-db-ja.com

Angular2 RC5エラー:zone.js:未処理のPromise拒否:ElementRefのプロバイダーがありません

最近RC4からRC5にアップグレードし、コードを変更しませんでしたが、アプリが壊れています。エラーメッセージは次のとおりです。 RC5 upgrade error

Index.htmlファイルをロードするとエラーメッセージが表示されたようです。

<html>
<head>
    <script>
        var pjson = require('./package.json');
        document.title = pjson.name;
    </script>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="./node_modules/font-awesome/css/font-awesome.min.css">
    <link rel="stylesheet" href="./node_modules/bootstrap/dist/css/bootstrap.min.css">
    <link rel="stylesheet" href="./css/global.css">

    <!-- 1. Load libraries -->
    <!-- Polyfill(s) for older browsers -->
    <script src="node_modules/core-js/client/shim.min.js"></script>
    <script src="node_modules/zone.js/dist/zone.js"></script>
    <script src="node_modules/reflect-metadata/Reflect.js"></script>
    <script src="node_modules/systemjs/dist/system.src.js"></script>
    <!-- 2. Configure SystemJS -->
    <script src="systemjs.config.js"></script>
    <script>
        System.import('app/main/bootstrap.js').catch(function(err){ console.error(err); });
    </script>
    <script>
        var electron = require('electron');
    </script>
</head>

<body>
<app-cmp>Loading...</app-cmp>
</body>
</html>

Update:今すぐAngular-CLIを使用してください。もう問題ありません。

6
Ng2-Fun

この例の my app のように、ElementRef@NgModuleアノテーションのimportsセクションにプルする必要があるようです。

それがあなたにとって何の意味もない場合は、RC.5がAngular 2。に加えた重大な変更を読む必要があります。これらはすごいです。 NgModuleのドキュメント =。その使用の非常に基本的な例は Quickstart Docs にあります。私の個人的な経験が何らかの兆候である場合、アプリを機能させるには大規模なオーバーホールが必要になります。数時間後に私のものを再び動作させるために、そして私のものは非常に基本的なアプリです。

// app.module.ts
// Angular 2 imports
import { NgModule, ElementRef } from '@angular/core'; //  <--- Import ElementRef
import { BrowserModule } from '@angular/platform-browser';
import { RouterModule } from '@angular/router'
import { HTTP_PROVIDERS } from '@angular/http';
import { COMMON_DIRECTIVES } from '@angular/common';

// My components and services (yours will certainly differ)
import {PublicPage} from './components/pages/public-page'
import {ProtectedPage} from './components/pages/protected-page'
import {LoggedoutPage} from "./components/pages/loggedout-page";
import { APP_ROUTES } from './app.routes';
import { WindowService } from './services/window.service';
import { AuthService } from './services/auth.service';
import { CookieService } from './services/cookies.service';

// My main component for this app/module
import { AppComponent }  from './app.component';

@NgModule({
    // Add ElementRef to the module imports below
    imports:      [ ElementRef, BrowserModule, RouterModule.forRoot(APP_ROUTES) ],  
    declarations: [ AppComponent, PublicPage, ProtectedPage, LoggedoutPage ],
    bootstrap:    [ AppComponent ],
    providers:    [ WindowService, AuthService, CookieService, HTTP_PROVIDERS, COMMON_DIRECTIVES ]
})
export class AppModule { }

次に、次のようなものでモジュールをブーストラップします。

// main.ts
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';
platformBrowserDynamic().bootstrapModule(AppModule);
5
Michael Oryl

ElementRefが自動的にインポートされることになっていることを90%確信しています。これが表示されている場合は、途中で何かが失われています...手動でインポートすることは想定されていません

1
Sam Alexander