2016-06-23 12 views
1

私はAngular2でデータサービスを開発しています。私は、Breezeを使用して、ASP.NET MVC6プロジェクトでホストされているBreeze Controllerからデータを照会します。 私は、角2の最後の解決策Breezeを見ました。BreezeとAngular2

私はBreezeHeroServiceのようなサービスを持っています。図解のようにq.tsを作成し、データサービスにインポートしました。

しかし、私は にコンパイルエラーがあります。breeze.config.setQ(Q): "breezeに名前を付けられません"。私のpackage.jsonで

私は

"依存関係" 次の依存関係を持っている:{

"angular2": "2.0.0-beta.0", 
"bootstrap": "3.3.6", 
"systemjs": "0.19.6", 
"es6-promise": "^3.0.2", 
"es6-shim": "^0.35.0", 
"reflect-metadata": "0.1.2", 
"rxjs": "5.0.0-beta.6", 
"zone.js": "0.6.12", 
"jquery": "2.1.4", 
"breeze-client": "1.5.7" 

}、以下の項目は、下のjsフォルダにコピーして、私は一口ファイルを持っている

をwwwroot:

'./node_modules/breeze-client/breeze.debug.js', 

'./node_modules/breeze-client/build/adapters/breeze.bridge.angular.js' 


In _Layout.cshtml i have following references: 

src="~/js/breeze.debug.js" 

src="~/js/breeze.bridge.angular.js" 

誰でもこの問題を解決できますか?

+0

、あなたはNG2でBreezeJSを使用することをお勧めします?私はそれが働いているが、私はそこに多くの活動がないことに気付きました。私はそれを廃棄し、データサービスを純粋なAngular2の方法で書くことを検討しています。個人的にはBreezeをAngular2プロジェクトに使用することを推奨している場合は、Wardやその他のプロジェクトスポンサーから聞きたいことがありますか? – Rodney

答えて

3

Breeze Angular 2に最新のブリッジを使用する場合は、Qを自分で設定する必要はありません。すべての初期設定はブリッジに注入されます。

次のリンクは私はあなたがODATAサービスとbreezejsを使用する場合はdatajsへの参照を含めることを忘れないでくださいBreeze Bridge Angular2

を開始しました。

Solutiuon:

する

npm install breeze-client --save 

は、独自のアプリケーションでブリッジを使用するには微風ブリッジ-angular2

npm install breeze-bridge-angular2 --save 

をインストールそよ風、クライアントをインストールし、以下の手順が必要です。

systemjs.config.jsでbreeze-clientとbreeze-bridge-angular2を設定します。

// map tells the System loader where to look for things 
var map = { 
    ... 
    'breeze-client':    'node_modules/breeze-client', 
    'breeze-bridge-angular2':  'node_modules/breeze-bridge-angular2' 
}; 

// packages tells the System loader how to load when no filename and/or no extension 
var packages = { 
    ... 
    'breeze-client':    { main: 'breeze.debug.js', defaultExtension: 'js'}, 
    'breeze-bridge-angular2':  { main: 'index.js', defaultExtension: 'js'} 
}; 

HTTP_PROVIDERSとBreezeBridgeAngular2をインポートし、それらをアプリケーションコンポーネントのプロバイダリストに追加します。

import { HTTP_PROVIDERS } from '@angular/http'; 
import { BreezeBridgeAngular2 } from 'breeze-bridge-angular2'; 
@Component({ 
    providers: [ 
    BreezeBridgeAngular2, 
    HTTP_PROVIDERS, 
    ] 
}) 
export class AppComponent { } 

BreezeBridgeAngular2を1回注入し、Breezeを使用します。ブリッジを挿入する動作によって、システムは自己設定されます。唯一の要件は、Breezeへの最初の呼び出しの前にブリッジを一度注入する必要があることです。

import { BreezeBridgeAngular2 } from 'breeze-bridge-angular2'; 

@Component({... 
}) 
export class AppComponent { 
    constructor(bridge: BreezeBridgeAngular2) { } // configure once by injecting bridge - no need to use it here 
} 
import { Injectable } from '@angular/core'; 
import { EntityManager, EntityQuery } from 'breeze-client'; 
import { Customer } from './entities'; 

@Injectable() 
export class DataService { 

    private _em: EntityManager; 

    constructor() { 
    this._em = new EntityManager(); 
    } 

    getAllCustomers(): Promise<Customer[]> { 
    let query = EntityQuery.from('Customers').orderBy('companyName'); 

    return <Promise<Customer[]>><any> this._em.executeQuery(query) 
    .then(res => res.results) 
    .catch((error) => { 
     console.log(error); 
     return Promise.reject(error); 
    }); 
    } 
} 

他の例のように静的スクリプトとして読み込むのではなく、breeze-clientを読み込むことに注意してください。 breeze.debug.jsなどを静的にロードしようとするindex.htmlに余分なスクリプトタグがないことを確認してください。

インデックスの例。html:

<html> 
    <head> 
    <title>Angular 2 QuickStart</title> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="stylesheet" href="styles.css"> 

    <!-- 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> 

    <script src="systemjs.config.js"></script> 
    <script> 
     System.import('app').catch(function(err){ console.error(err); }); 
    </script> 
    </head> 

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

上記の手順でAngular2 RC4を動作させることができました。

私はのOData enpointを使用して、私のデータサービス(必要なすべての輸入は「風-クライアントのから来る)に次の設定を追加しています。興味のあるうち

constructor() { 
    // Tell Breeze we are using an OData service created by a C# WebApi2 + EF6 solution 
    config.initializeAdapterInstance('dataService', 'webApiOData', true); 
    this._em = new EntityManager('http://localhost:60062/odata'); 
    // Breeze doesn't know that EF will manage my entities Id's (SQL Identity columns), so we need to tell Breeze that the server will handle Id values) 
    this._em.fetchMetadata((schema) => { 
     console.log('schema', schema); 
     var collectionPointType = this._em.metadataStore.getEntityType("CollectionPoint"); 
     (<any>collectionPointType).setProperties({ autoGeneratedKeyType: AutoGeneratedKeyType.Identity }); 
    }); 
    } 
+0

行インポート{Customer}を './entities'から取得するには、typescriptでエンティティクラスを手動で作成する必要がありますか。 – sskasim

関連する問題