48

Angular 2.0 では、$scope.

それに代わるものは何ですか?コンポーネント間でデータを共有するにはどうすればよいですか? このscopeオプションはディレクティブで使用できますか? より実際的には、私が知ることができる現在の代替手段はありますか?

私は知ってcontroller asいますが、コントローラーも排除されると読みました。

Angular チームが開始したこのような革命に混乱しています。

4

6 に答える 6

48

Angular 2.0thisの代わりに使用してい$scopeます。

2.0 での主な変更点の 1 つは、コントローラーの廃止と、コンポーネントへの新たな重点です。コンポーネント ベースのアプリに移行することの大きな利点は、インターフェイスの定義が容易になることです。さらに、HTML 要素には、イベント、属性、およびプロパティで簡単にマップできるインターフェイスが既にあります。

AngularJS 1.3から2.0 への移行については、こちら を参照してくださいAngular 2.0 の完全なドキュメントも参照してください

于 2014-11-28T06:19:33.940 に答える
20

Angular2 では、 https: //angular.io/docs/ts/latest/cookbook/component-communication.html の代わりに共有サービスを使用します。$scope

@Injectable()
class SharedService {
  someState:String;
  someEventStream:Subject<String> = new Subject<String>();
}
@Component({
  selector: ...,
  providers: [SharedService] 
})
class MyComponent {
  constructor(private sharedService:SharedService) {}
}

上記の例では、プロバイダー ([SharedService]は の略[{provide: SharedService, useClass: SharedService}]) ごとに 1 つのインスタンスが維持されます。

このようなプロバイダーのスコープは、それが提供されるコンポーネントであり、子孫に同じプロバイダーが登録されていない場合はその子孫です。

コンポーネントが依存関係を要求するconstructor(private sharedService:SharedService)と、Angulars DI (依存性注入) はコンポーネント自体のプロバイダーを調べ始め、次にルート コンポーネントに向かって上向きに調べ、次にブートストラップに登録されたプロバイダーを調べます。最初に見つかったものを返します。

2 つのコンポーネントが (同じプロバイダーから) 注入された同じインスタンスを取得した場合、このサービスを使用して通信できます。これには、サブスクライブして のイベントを発行するSubjectか、状態を読み書きするか、サービスのメソッドを呼び出します。

于 2016-08-05T05:01:12.230 に答える
6

を使用することは、ウォッチャーやイベントなどのいくつかのものが必要になりますが、controller as使用しないで作業することに慣れるための良い方法です。Angular 2.0 ではコントローラーは実際には削除されていません。しかし、に相当するものはありません。コントローラーとビューを使用する代わりに、コントローラーとビューを本質的にカプセル化するディレクティブを使用するだけです。$scope$scopeng-controller

于 2014-11-20T19:06:30.253 に答える
0

コンポーネントクラスにサービスを注入することなく、角度でこれを行うことができます。$scope変数と同じ要件を満たすデータを運ぶrxjsサブジェクト「行動サブジェクト」を使用することにより

これは、必要なコンポーネントにサブスクライブされているをエクスポートする stackblitz の例ですconst lettersub.service.ts

于 2018-06-21T12:53:00.280 に答える