Angular 2.0 では、$scope
.
それに代わるものは何ですか?コンポーネント間でデータを共有するにはどうすればよいですか? このscope
オプションはディレクティブで使用できますか? より実際的には、私が知ることができる現在の代替手段はありますか?
私は知ってcontroller as
いますが、コントローラーも排除されると読みました。
Angular チームが開始したこのような革命に混乱しています。
Angular 2.0 では、$scope
.
それに代わるものは何ですか?コンポーネント間でデータを共有するにはどうすればよいですか? このscope
オプションはディレクティブで使用できますか? より実際的には、私が知ることができる現在の代替手段はありますか?
私は知ってcontroller as
いますが、コントローラーも排除されると読みました。
Angular チームが開始したこのような革命に混乱しています。
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
か、状態を読み書きするか、サービスのメソッドを呼び出します。
を使用することは、ウォッチャーやイベントなどのいくつかのものが必要になりますが、controller as
使用しないで作業することに慣れるための良い方法です。Angular 2.0 ではコントローラーは実際には削除されていません。しかし、に相当するものはありません。コントローラーとビューを使用する代わりに、コントローラーとビューを本質的にカプセル化するディレクティブを使用するだけです。$scope
$scope
ng-controller
コンポーネントクラスにサービスを注入することなく、角度でこれを行うことができます。$scope変数と同じ要件を満たすデータを運ぶrxjsサブジェクト「行動サブジェクト」を使用することにより
これは、必要なコンポーネントにサブスクライブされているをエクスポートする stackblitz の例です。const letter
sub.service.ts