2

私はこれを作ろうとしています ( https://chsakell.com/2016/01/01/cross-platform-single-page-applications-with-asp-net-5-angular-2-typescript/ ) チュートリアル/例シングル ページ アプリケーションをマシン (Visual Studio 2015、Win 7 Prof、Chrome ブラウザー) で実行すると、アルバム ページを開こうとすると、ブラウザー コンソールに次のランタイム エラーが表示されます。

platform-browser.umd.js:937 Error: Uncaught (in promise): ReferenceError: alertify is not defined
at resolvePromise (zone.js:558)
at zone.js:535
at ZoneDelegate.invoke (zone.js:332)
at Object.onInvoke (core.umd.js:9245)
at ZoneDelegate.invoke (zone.js:331)
at Zone.run (zone.js:225)
at zone.js:591
at ZoneDelegate.invokeTask (zone.js:365)
at Object.onInvokeTask (core.umd.js:9236)
at ZoneDelegate.invokeTask (zone.js:364)BrowserDomAdapter.logError @ platform-browser.umd.js:937ExceptionHandler.call @ core.umd.js:4392next @ core.umd.js:9971schedulerFn @ core.umd.js:9168SafeSubscriber.__tryOrUnsub @ Subscriber.ts:240SafeSubscriber.next @ Subscriber.ts:192Subscriber._next @ Subscriber.ts:133Subscriber.next @ Subscriber.ts:93Subject._finalNext @ Subject.ts:154Subject._next @ Subject.ts:144Subject.next @ Subject.ts:90EventEmitter.emit @ core.umd.js:9156onError @ core.umd.js:9394onHandleError @ core.umd.js:9266ZoneDelegate.handleError @ zone.js:336Zone.runGuarded @ zone.js:242_loop_1 @ zone.js:508drainMicroTaskQueue @ zone.js:515ZoneTask.invoke @ zone.js:437

zone.js:484 Unhandled Promise rejection: alertify is not defined ; Zone: angular ; Task: Promise.then ; Value: ReferenceError: alertify is not defined(…) ReferenceError: alertify is not defined
    at new NotificationService (http://localhost:9823/lib/spa/core/services/notificationService.js:14:26)
    at AppView._View_Albums_Host0.createInternal (Albums.ngfactory.js:15:35)
    at AppView.create (http://localhost:9823/node_modules/@angular/core//bundles/core.umd.js:12439:25)
    at ComponentFactory.create (http://localhost:9823/node_modules/@angular/core//bundles/core.umd.js:9047:40)
    at ViewContainerRef_.createComponent (http://localhost:9823/node_modules/@angular/core//bundles/core.umd.js:8354:49)
    at eval (http://localhost:9823/node_modules/@angular/core//bundles/core.umd.js:10295:33)
    at ZoneDelegate.invoke (http://localhost:9823/node_modules/zone.js/dist/zone.js:332:29)
    at Object.onInvoke (http://localhost:9823/node_modules/@angular/core//bundles/core.umd.js:9245:45)
    at ZoneDelegate.invoke (http://localhost:9823/node_modules/zone.js/dist/zone.js:331:35)
    at Zone.run (http://localhost:9823/node_modules/zone.js/dist/zone.js:225:44)

問題の notificationService.ts。これは、コンパイル時の通知を避けるために、クラスの外側で alertify を宣言していることに注意してください。

import { Injectable } from '@angular/core';

declare var alertify: any;

@Injectable()
export class NotificationService {
    private _notifier: any = alertify;

    // irrelevant other code
}

生成された notificationService.js。「declare var alertify: any;」に対応するものはないようです。alertify は外部の JavaScript ライブラリであるため問題ないかもしれませんが、それでも独特です:

"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
    return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var core_1 = require('@angular/core');
var NotificationService = (function () {
    function NotificationService() {
        this._notifier = alertify;

    // irrelevant other code
}());

github のプロジェクトの最新コードを使用しています: https://github.com/chsakell/aspnet5-angular2-typescript

global.json で .NET Core のバージョンを 1.0.0-preview1-002702 から 1.0.0-preview2-003121 に変更する必要がありました。

github readme の Visual Studio 2015 のすべてのインストール手順に従いました。

パッケージ マネージャー コンソールで以下を追加で実行しました:' bower install alertify.js

奇妙に見えることの 1 つは、Bower (0.3.11) の下の alertify.js と NPM (1.0.12) の下の同じバージョンのバージョンが一致していないことです。Bower.json で alertify のバージョンを 1.0.12 に変更して、もう一度 alertify をインストールしようとしましたが、失敗しました:

bower alertify.js#1.0.12  ENORESTARGET No tag found that was able to satisfy 1.0.12

cmd "npm install" を実行すると、NPM の package.json のバージョンを変更しても失敗します。

ERR!
 version not found: alertify.js@0.3.11

何が間違っている可能性がありますか?私はこの資料のすべてに非常に慣れていないので、何が起こっているのかについての説明は役に立ちます.

更新: http://alertifyjs.com/からダウンロードした .js および .css ファイルを wwwroot/lib フォルダーに追加し、index.cshtml のスタイルシート参照を更新すると、エラーが表示されなくなり、通知ボックスが美しく表示されます。このアプローチでは、bower と NPM の可能性を最大限に活用する代わりに、alertify ファイルを手動で更新する必要があるため、これはまだ最適なソリューションではないように感じます。このソリューションを改善する方法について提案がある場合は、お知らせください。

4

2 に答える 2

2

私もそのチュートリアルを見てきましたが、私にとっての問題は、alertify が廃止されたため、bower がそれを認識しても、.js ファイルがダウンロードされないことでした。alertify.js をグーグルで検索し、スクリプトを手動でダウンロードして、アプリが検索するフォルダーに配置する必要があります。これで問題は解決しました。

また、すべてがどのように連携して機能するのかに慣れるまで (特に VS のツールが改善されるまで)、代わりに VS Code を使用することをお勧めします。そのチュートリアルを起動して実行するのは、それを使用する方がはるかに簡単でした.

于 2016-09-02T07:25:49.607 に答える