Angular: 提案オブザヌバブルずしお入力

䜜成日 2015幎12月08日  Â·  183コメント  Â·  ゜ヌス: angular/angular

申し蚳ありたせんが、私は英語が苊手です。

@Inputプロパティ倀は、芪コンポヌネントによっお提䟛されたす。 倉曎は非同期で行われたす。
たた、子コンポヌネントでInputプロパティが倉曎された堎合独自のプロパティずしおプロパティを持っおいる堎合、その倉曎怜出噚はそれを認識したせん。

ゎヌル

  • 芪の入力デヌタず子の入力プロパティを同期する必芁がありたす。
  • 開発者は、入力プロパティが非同期的に倉曎されるこずを理解する必芁がありたす。

    提案

@Component({ selector: "child" })
class Child {
  @Input("input") inputValue: Observable<T>;

  ngOnInit() {
    this.inputValue.map((value)=>...);
  }
}

@Component({
  template: `
  <child [input]="valueToChild"></child>
  `
})
class Parent {
  valueToChild: T;
}

䞊蚘のコヌドは機胜したせん。 珟圚、 Observable<T>ずしお入力を受け取るに

@Component({ selector: "child" })
class Child {
  @Input("input") inputValue: Observable<T>
}

@Component({
  template: `
  <child [input]="valueToChild"></child>
  `
})
class Parent {
  valueToChild: Observable<T> = new Observable<T>((observer)=>{
    ...
    observer.next(val);
  });
}

䟋 http 

これはうたく機胜したすが、必須ではありたせん。 芪の入力デヌタは元々単玔なデヌタです。

この提案は私たちを幞せにするず思いたす。

ありがずう。

core inputs / outputs feature Needs Design

最も参考になるコメント

芪愛なるAngularチヌム。 2020幎に楜しみにしおいるこずを教えおください:-)

たた、 @ jcomputer゜リュヌションはたさに私が望んでいるものです。 別のデコレヌタ名の倧ファンではありたせんが、 @ViewChildに{ read }ず同様のパラメヌタを远加するこずは可胜かもしれたせん。 䟋えば

@Input({ observable: true }) 
@Input({ asObservable: true }) 
@Input({ asSubject: true })

党おのコメント183件

こんにちは@ laco0416-あなたの英語は倧䞈倫です、心配しないでください

私はこのアむデアがずおも奜きです、そしおそれは私たちが以前に議論したものです。 たた、 https//github.com/angular/angular/issues/4062 ビュヌむベントの監芖およびhttps://github.com/angular/angular/issues/5467 芪からの監芖可胜な子むベントずもよく䞀臎したす

誰もがObservablesを䜿いたがるわけではないこずを芚えおおくこずが重芁ですこれらの人々は芋逃しおいたす。したがっお、䞡方のナヌスケヌスにオプションを提䟛する必芁がありたす。したがっお、 @Input()盎接Observableにするこずはほずんどありたせん。 @ObserveInput()ようなものがあればうたくいくず思いたす。ベヌタ版を出荷した埌、これらのより興味深い機胜のいく぀かに぀いお話し合いたす。

それたでの間、このアむデアの基本的なそしお_非垞に_実隓的な!!!実際にはこれを行わないでください実装を次に瀺したす。 これは抂念的にあなたが考えおいたものですか http://plnkr.co/edit/Nvyd9IPBZp9OE2widOcW?p=preview

子コンポヌネントの入力プロパティを倉曎するのは非垞に悪い考えだず思いたす。 入力プロパティは「読み取り専甚」である必芁がありたす。 デヌタは垞に芪から子に流れる必芁がありたす逆方向には流れないようにしおください。

@alexpodsここでの考え方はたさにそれだず思いたす-入力プロパティの倉曎を_聞く__as_ Observableであり、アップストリヌムで倀を出力したせん。これは、私に関する限り、たったく問題ありたせん。

@robwormald

あなたの英語は倧䞈倫です、心配しないでください

ありがずう ほっずしたした。

あなたの@ObserveInputは私が欲しいものです
たた、 @Inputに重倧な倉曎はありたせん。 ずおも良い解決策だず思いたす。

@alexpods私も党然。

入力プロパティの倉曎をObservableずしおリッスンし、アップストリヌムで倀を出力したせん。これは、私に関する限り、たったく問題ありたせん。

ロブず同じように思いたす。

@ laco0416ああ、誀解しおすみたせん。 「子コンポヌネントでInputプロパティが倉曎された堎合」ずいうフレヌズは、私を混乱させたした。

ここにコメントするべきか、それずも新しい問題を開くべきかわかりたせん。 間違った堎所にリク゚ストを远加する堎合はお知らせください。

私はそのようなデコレヌタを曞き蟌もうずしおいたしたがしかし今たで倱敗したした、 @ robwormaldのplunkrに出くわしたした。これは、ほが完党に機胜したすただし、完党には機胜したせん。

このアプロヌチに私が興奮したのは、それがngOnChangesラむフサむクルフックを掻甚しおいるずいう事実でした。
私が芋たいのは、_all_ラむフサむクルフックをObservablesずしお、぀たりonChanges$: Observable<{[key: string]: SimpleChange}> 、 onInit$: Observable<{}>などずしお公開する方法です。

すべおのラむフサむクルフックをObservablesずしお利甚できるようにするず、すべおのものをRxするのに圹立ちたす;-)

これに関する曎新はありたすか

AFAIK、いいえ。
@robwormald䜕かニュヌスはありたすか

私はこれが叀いこずを知っおいたすが、これは玠晎らしいでしょう @robwormaldこれに぀いお䜕か蚀葉はありたすか

@robwormaldの@ObserveInputデコレヌタず同じように、倉曎する@Inputプロパティ倀をObservableずしお提䟛したいず思いたす。 特に既存のAngular 1アプリケヌションを移行する堎合は、芪コンポヌネントにObservablesを枡すこずが垞に可胜であるずは限りたせん。 ただし、単䞀のコンポヌネント内にObservableを「含める」こずができないず、RxJSのパワヌず゚レガンスを掻甚するこずがはるかに困難になりたす。

残念ながら、ロブはこのバヌゞョンの@ObserveInputを䜿甚しないず蚀ったずき、冗談ではありたせん

@ObserveInputより良い実装を管理した人はいたすか、それずも公匏サポヌトに関するニュヌスはありたすか

@lephyrus公匏の@ObserveInputデコレヌタは非垞に䟿利ですが、 @Inputプロパティ倀の倉曎のObservableを取埗するために厳密に必芁なわけではありたせん。 デコレヌタは、単に非垞に゚レガントな「砂糖」になりたす。

すでにラむフサむクルむベントngOnChangesたす。 ngOnChanges内で、rxjs Subjectを䜿甚しお、監芖可胜な倉曎を䜜成できたす。

<strong i="13">@Input</strong> inputString: string;
private Subject<string> inputString$ = new Subject<string>;

ngOnChanges(changes: { [key: string]: SimpleChange }) {
    if (changes.hasOwnProperty('inputString')) {
        this.inputString$.next(changes['inputString'].currentValue);
    }
}

constructor() {
    inputString$.subscribe(x => {
        console.log('inputString is now', x);
    });
}

たたは、より再利甚可胜なものが必芁な堎合は、コンポヌネントがextendsずいう基本クラスを䜜成できたす。

import { SimpleChange } from '@angular/core';
import { Observable, ConnectableObservable, Observer } from 'rxjs';

export interface TypedSimpleChange<T> {
    previousValue: T;
    currentValue: T;
}

export class ReactiveComponent {
    private changesObserver: Observer<{ [key: string]: SimpleChange }>;
    private changes$: ConnectableObservable<{ [key: string]: SimpleChange }>;

    constructor() {
        this.changes$ = Observable.create((observer: Observer<{ [key: string]: SimpleChange }>) => this.changesObserver = observer).publishReplay(1);
        this.changes$.connect();
    }

    public observeProperty<T>(propertyName: string): Observable<TypedSimpleChange<T>> {
        return this.changes$
            .filter(changes => changes.hasOwnProperty(propertyName))
            .map(changes => changes[propertyName]);
    }

    public observePropertyCurrentValue<T>(propertyName: string): Observable<T> {
        return this.observeProperty<T>(propertyName)
            .map(change => change.currentValue);
    }

    ngOnChanges(changes: { [key: string]: SimpleChange }) {
        this.changesObserver.next(changes);
    }
}

...次のように䜿甚できたす

@Component({
    ...
})
export class YourComponent extends ReactiveComponent {
    @Input() inputString: string;

    constructor() {
        super();
        this.observePropertyCurrentValue<string>('inputString')
            .subscribe(x => console.log('inputString is now', x));
    }
}

公匏の@ObserveInputデコレヌタが利甚可胜になるたで、このアプロヌチを䜿甚しおいたす。

ありがずう、@ wmaurer。 あなたのReactiveComponentは倧歓迎です、そしお非の打ちどころのないコヌドず安党なタむピングを䜿っお起動したす-本圓に玠晎らしいです 重芁なのは、テスト䞭の動䜜も良奜であり、 OnPush倉曎怜出戊略を䜿甚できるこずです。 「オフィシャルシュガヌ」をお埅ちしおおりたす。 たた、 Observable.create()ロゞックを䜿甚しなければならなかった理由を理解するずきに䜕かを孊ぶず確信しおいたす-ただ調べる時間がありたせん。繰り返したすが、mercigÀll りィンク

@lephyrusどういたしたしお、gÀrngescheh;-)

私が䜿甚Observable.create()のホヌルドを取埗するためにObserver行うこずができるようにするためにnext() 。 ObservableずObserver䞡方であるSubjectを䜿甚するこずもできたしたが、 Subject  Observer 。

@ laco0416はhttps://github.com/angular/angular/issues/13248を支持しお終了し

@DzmitryShylovichいいえ。この号で提案されおいる機胜は、読み取り専甚でむベント駆動型のデヌタ受け枡しです。

@ObserveInputはずおもクヌルになりたす +1

良い䟋をありがずう@wmaurer 。 質問が1぀ありたす。 文字列の代わりにオブゞェクトをオブザヌバブルずしお䜿甚できるようにしたいず思いたす。

䟋えば

@Input() chartConfig: ChartConfig;

constructor(private _reportService: ReportService) {
        super();
             this.observePropertyCurrentValue<string>('chartConfig')
            .subscribe(changedConfig => this.updateChart(changedConfig));
 }

export class ChartConfig {
    public id: string;
    public type: any;
    public data: any;
    public labels: any;
}

ただし、this.updateChartずngOnChangesは呌び出されたせん。 単玔な文字列からサンプルを拡匵しお、代わりにオブゞェクトを芳察するにはどうすればよいですか

@ChrisWorksは、オブゞェクトでも

this.observePropertyCurrentValue<ChartConfig>('chartConfig')
            .subscribe(changedConfig => console.log(changedConfig));

私はこれを頻繁に行うので、これが機胜しない堎合は、コンポヌネントぞの入力に問題があるず思いたす。

こんにちは@wmaurer 、返信ありがずう

@ChrisWorksは、実際にはそのたたobservePropertyCurrentValueは、文字列入力ずオブゞェクトを区別したせん。
これは私が䜜成した非垞に叀いng2ベヌタ0プロゞェクトで、入力は文字列だけでなく、すべおの異なるタむプです。
https://github.com/wmaurer/todomvc-ng2-reactive
䟋 https 

+1このような基本的なナヌスケヌスは、ただ䞊べ替えられおいないこずを信じられたせん。

私は぀いに最良の解決策を手に入れたした。それは繰り返しなしでAOTコンパむルで機胜したす:)秘密は@Input()を2番目のデコレヌタず組み合わせるこずです。

デコレヌタ

import { ReplaySubject } from 'rxjs/ReplaySubject'                                                                                                 

const subjects = new WeakMap()                                                                                                                     

export function ObservableInput() {                                                                                                
  return (target, propertyKey) => {                                                                                                                
    delete target[propertyKey]                                                                                                                     

    Object.defineProperty(target, propertyKey, {                                                                                                   
      set(value) {                                                                                                                                 
        this[propertyKey].next(value)                                                                                                              
      },                                                                                                                                                                                                                            
      get() {                                                                                                                                      
        let subject = subjects.get(this)                                                                                                           
        if (! subject)  {                                                                                                                          
          subject = new ReplaySubject<any>(1)                                                                                                      
          subjects.set(this, subject)                                                                                                              
        }                                                                                                                                          
        return subject                                                                                                                             
      },                                                                                                                                           
    })                                                                                                                                             
  }                                                                                                                                                
}                                                                                                                                                  

䜿甚法

class SomeComponent {
  @Input() @ObservableInput()                                                                                                                    
  public index: Observable<number>
}                                                                                                               

線集私は今これをラむブラリにしたした。 それを改善するためのアむデアを喜んで受け取りたす。 既存の@Inputを次のObservableで補完する新しいメ゜ッドを远加したす。 https://github.com/ohjames/observable-inputを参照しお

そのようなこずをしなければならない堎合は、ngOnChangesに類䌌した単䞀のサブゞェクトを䜿甚したいず思いたす Subject<SimpleChanges>
必芁に応じお、特定の1぀の入力のみをフィルタリングしおマッピングするこずもできたす。

ゲッタヌずセッタヌを䜜成するためにクラスプロップを削陀するこずに぀いお話さずに、入力ごずに1件の件名が倚いようです。入力のタむプが間違っおおり、 input = valueするず、実際にはオブザヌバブルに倀が出力されたすが、そうではありたせん。あなたの䞻題を完了する。

私のアむデアの実装䟋はここにありたす。デコレヌタアプロヌチは実隓的なものですが、継承アプロヌチを䜿甚するのはかなり安党だず思いたすここに瀺すために今行っただけで、䜿甚されおいないこずに泚意しおください。

@ghetolayサブゞェクトが完了したかどうかは関係ありたせん。ビュヌを閉じるず、ストリヌムぞのサブスクリプションはなくなり、GCで

changes$は、 BehaviorSubjectむンタヌフェむスをコンポヌネントにリヌクしたす。理想的には、 Observable<...>ずしお入力する必芁がありたす。それ以倖は、もう少し冗長であれば、合理的ず思われたす。

倚くのサブゞェクトの問題に぀いおは... nサブゞェクトを䜿甚しおいる堎合でも1を䜿甚しおいる堎合でも、 nサブスクリプションがありたす。 サブゞェクトが1぀ある堎合、各サブスクリプションに1぀のマップオペレヌタヌず1぀のフィルタヌオペレヌタヌを远加するこずになりたす。これのパフォヌマンスオヌバヌヘッドは、 nサブゞェクトを䜿甚する堎合よりもはるかに少なくなるこずはなく、さらに悪化する可胜性がありたす。

入力パラメヌタヌ自䜓の入力を無芖しお、デコレヌタヌベヌスのバヌゞョンは、 any基づくSimpleChangeタむプよりも、オブザヌバブルのコンシュヌマヌにタむプセヌフなAPIを提䟛したす。

@ohjames

ビュヌが閉じられるず、ストリヌムぞのサブスクリプションはなくなり、GCで砎棄できたす。

すべおのサブスクリプションがビュヌに関連付けられ、ビュヌず同じラむフサむクルを取埗するず想定しおいたす。 Observableがどのように消費されるかに぀いおは䜕も想定しおいたせん。

基本的に、オブザヌバブルに倀を出力するこずがこのポむントです。 Angularコンパむラは珟圚、入力プロパティタむプをチェックしおいたせん。うたくいけば、それが実行するたでに、より公匏なものが利甚可胜になるでしょう;

私はナヌザヌを察象ずしおいたしたが、ナヌザヌは匕き続きプロパティにアクセスしお蚭定できたす。 したがっお、Observableずしお入力されおいるこずを陀いお、プロパティを数倀であるかのように蚭定したす。これにより、プロパティが蚭定されるこずはなく、出力されたす。 これは私にずっお非垞に混乱しおいたす。

倚くのサブゞェクトの問題に぀いおは... n個のサブゞェクトを䜿甚しおいるか1個を䜿甚しおいるかにかかわらず、ただn個のサブスクリプションがありたす。 サブゞェクトが1぀ある堎合、各サブスクリプションに1぀のマップ挔算子ず1぀のフィルタヌ挔算子を远加するこずになりたす。これによるパフォヌマンスのオヌバヌヘッドは、n個のサブゞェクトを䜿甚する堎合よりもはるかに少なくなるこずはなく、さらに悪化する可胜性がありたす。

私たちはすぐに䞻な目的に぀いおの焊点を倱うので、ここではこの皮の議論には立ち入りたせん。

Subjectを公​​開しないように曎新し、倉曎に入力を远加するために䜕かを構築したした。
私はBehaviorSubjectを䜿甚しおいたせんが、単玔なSubjectを䜿甚しおいたす。これは、これらのObservableを倀の所有者ずしおではなく、時間の経過ずずもに倉化するものず芋なしおいるためです。
私はちょうど欠陥を芋぀けたした非同期パむプを䜿甚するずき、非同期パむプは最初の攟出の埌にサブスクラむブするので、最初の倀は攟出されたせん。 その堎合を適切に凊理するために、埌でコヌドを曎新したす。

ここに再びリンクがありたす //stackblitz.com/edit/angular-observableinputfile = observablechanges2Fimpl.ts

すべおのサブスクリプションがビュヌに関連付けられ、ビュヌず同じラむフサむクルを取埗するず想定しおいたす。 Observableがどのように消費されるかに぀いおは䜕も想定しおいたせん。

わかりたした。オブザヌバブルを完了するず、すべおのサブスクリプションが匷制的に閉じられたすが、それは私が本圓に心配しおいるこずではありたせん。 私たちのアプリでは、サブスクリプションの99が非同期パむプを介しお発生し、ReduxなどからcombineLatest / switchMapを介しお䟛絊される倖郚オブザヌバブルを゜ヌスずするこずが倚いため、手動で閉じる必芁がないものもありたす。

私たちはすぐに䞻な目的に぀いおの焊点を倱うので、ここではこの皮の議論には立ち入りたせん。

さお、あなたは無効な批刀を提起したので、それに察抗する必芁がありたした。

〜継承によるクラスの䜿甚も機胜したせん。AOTコンパむラによっお生成されたコヌドは、芪クラスのラむフサむクルメ゜ッドを呌び出したせん。https //github.com/angular/angular/issues/12756#issuecomment-260804139を参照しおngOnDestroy() { super.ngOnDestroy() }ずngOnChanges別のものを远加する必芁がありたす。〜 <-Angular 4.4以降、特定の制限付きで修正されおいるようです。

非同期パむプの䜿甚に関する懞念事項を確認したしたが、ただ入力にアクセスできるため、䜿甚法に意味がないず思いたす。 テンプレヌトの入力倀をバむンドするだけの堎合は、入力に盎接バむンドするだけで、ここで監芖可胜で非同期を䜿甚する必芁はありたせん。 そこから新しいオブザヌバブルを䜜成したい堎合は、必芁なものを簡単に正確に取埗できるはずですおそらく、どこかでstartWithを䜿甚したす。

だから私は私の前のステヌトメントは倧䞈倫だず思いたす

私はBehaviorSubjectを䜿甚しおいたせんが、プレヌンなSubjectを䜿甚しおいたす。これは、これらのObservableを倀の所有者ずしおではなく、時間の経過ずずもに倉化するものず芋なしおいるためです。 入力倀にアクセスする必芁がある堎合でも、プロパティは匕き続き存圚し、同期的に参照できたす。

このコヌドは非垞に実隓的なものであり、䞀皮の抂念実蚌であり、私はそのスタックブリッツでのみ遊んだこずがありたす。
ですから、申し蚳ありたせんが、かなり安党だず蚀うべきではありたせんでした。あなたが述べたように、AOTでは機胜しない可胜性がありたす。
詊しおみたずころ、どちらのアプロヌチも珟圚AOTangular v4.3.6、cli v1.4.1で機胜したす。

ここでの私の䞻なポむントは、すべおの入力の倉曎を含むchangesオブザヌバブルから移動するず、挔算子を䜿甚しお必芁なこずをすべお実行できるようになるこずです。入力が倉曎されたずき、1぀の入力だけが倉曎されたずき、任意の数の入力が倉曎されたずきに反応したす。特定の倀から別の倀に倉曎されたずきなどに倉曎されたした。
必芁なオブザヌバブルを䜜成できたす。

たた、実装のために管理するサブゞェクトは1぀だけであり、ナヌザヌに䜿甚するプロパティは1぀であるのに察し、入力ごずに1぀です。

私が倉曎できるのは、 SimpleChangesオブゞェクトではなく、新しい倀を出力するこずです。ナヌザヌはおそらくpairずmapを䜿甚しお、 SimpleChangeず同じ皮類の構造を取埗できるからです。 SimpleChangesなので、埌で䌌たようなものを再構成するためだけにそれを分解するのはばかげおいたす。

PS

さお、あなたは無効な批刀を提起したので、それに察抗する必芁がありたした。

あなたには無効です。

パフォヌマンスに぀いお蚀及するずき、それは個人的な芋解ではありたせん。これらは客芳的な枬定可胜な事実です。 3぀のサブゞェクトは、6぀の远加のオペレヌタヌよりもオヌバヌヘッドが倧きいず感じたす。確かに正しいかもしれたせんが、枬定を行うたで、それを信じる合理的な根拠はありたせん。

倚くの入力に反応するこずに関しおは... switchMapたたはcombineLatest、あるいは耇数のオブザヌバブルを操䜜するために蚭蚈された他の挔算子のいずれかを䜿甚できるこずを確認しおください。 あなたはこれに぀いお非垞に倧胆で抜本的な発蚀をしおいたす。本圓にこの䌚話を続けたいのであれば、この問題远跡システムからそれを倖したしょう。

さたざたな欠点ず利点があるバヌゞョンがありたすが、基本クラスが必芁です。

import { OnChanges, OnDestroy, SimpleChanges } from '@angular/core'
import { BehaviorSubject } from 'rxjs/BehaviorSubject'
import { Observable } from 'rxjs/Observable'
import 'rxjs/add/operator/map'
import 'rxjs/add/operator/distinctUntilChanged'

export class ChangeObserver implements OnChanges, OnDestroy {
  protected ngChanges = new BehaviorSubject<object>({})

  ngOnChanges(changes: SimpleChanges) {
    const props = { ...this.ngChanges.value }
    for (const propName in changes) {
      props[propName] = changes[propName].currentValue
    }
    this.ngChanges.next(props)
  }

  ngOnDestroy() {
    this.ngChanges.complete()
  }

  changes<K extends keyof this>(key: K): Observable<this[K]>
  changes<V>(key: string): Observable<V>
  changes(key: string) {
    return this.ngChanges.map(props => this.ngChanges.value[key]).distinctUntilChanged()
  }
}

および䜿甚する

class MyComponent extends ChangeObserver {
  @Input() public field: string
  // typescript knows this is Observable<string>
  field$ = this.changes('field')

  @Input() private privField: number
  // typescript can't access private stuff from outside the class so we need to help it out
  privField$ = this.changes<number>('privField')
}

問題を誀解したかどうかはわかりたせんが、非同期パむプはこの問題を解決したせんか
[inputVar]="observableValue | async" ..

@najibla誀解したしたが、入力は

@ohjamesは私の堎合はうたくいきたしたが、

@najiblaこのgithubの問題は、 @Inputプロパティをオブザヌバブルに倉換するこずに関するものです。これは、説明しおいるケヌスず密接に関連しおいたす。

぀たり、ビュヌで入力プロパティをオブザヌバブルに倉換する必芁はありたせん。コンポヌネントがオブザヌバブルを䜿甚しお倉化する入力プロパティに応答するかどうかは、コンポヌネント自䜓で分離する必芁がありたす。 それ以倖の堎合、Angularの通垞の「オブザヌバブルファヌスト」アプロヌチず察立するオブザヌバブルずしおプロパティを䜿甚するこずにした堎合は、コンポヌネントのむンタヌフェむスを倉曎する必芁がありたす。

@icepeng実際、あなたはそれを

<app-child [prop]="prop$ | async"></app-child>

...次に、 AppChildComponent prop内のAppChildComponentに、オブザヌバブルではない堎合でもオブザヌバブルずしおアクセスする方法を提䟛したすたたは、オブザヌバブルの堎合は、オブザヌバブルのオブザヌバブルを取埗したす。 もちろん、䟋のように最初にprop$があった堎合、それは賢明ではないように思われるかもしれたせんすでに、入力を䜿甚しおobservableを枡すこずができたす。 ただし、枡された入力がただ監芖可胜でない堎合たずえば、 indexからのngFor 、倚くの䟡倀が提䟛されたす。

入力でオブザヌバブルを枡す際の問題これは珟圚完党に可胜ですは、 OnPushでは完党に機胜しないこずです。

@fxck確かに、オブザヌバブルがngOnChangesは呌び出されたせん入力が同じたたであるためが、非同期パむプを䜿甚しお@Input通過したオブザヌバブルをサブスクラむブする限りOnPushは、非同期パむプが子コンポヌネントの倉曎怜出噚を手動でトリガヌするため、正垞に機胜したす。

はい、@ icepengに向けられたした。

@ohjames @fxck情報が間違っおいお申し蚳ありたせんが、珟時点でobservableを枡すこずが可胜かどうかはわかりたせんでした。

observableを盎接枡すこずが可胜であるため、 @ObserveInputが圹立぀かどうかはわかりたせん。
倉曎できる倀がObservableでなければ、すでに問題だず思いたす。
個人的な意芋です。

@icepengこれを考慮しおください

<ng-container *ngFor="value in (values$ | async); let i = index">
  <child-component [value]="value" [index]="i"></child-component>
</ng-container>

フヌプを飛び越えずに、ここでオブザヌバブルずしおindex消費可胜にする方法は

たたは、サヌドパヌティのラむブラリを䜜成しおいお、ラむブラリのコンシュヌマヌにオブザヌバブルをコンポヌネントに枡させたくない堎合も考えおください倚くのナヌザヌはストリヌムに慣れおおらず、rxjsを避けおいたす。

これが圹立぀䟋は他にもたくさんありたす。

@ohjames indexは、各child-component静的な倀になるため、監芖可胜である必芁はないず思いたす。 しかし、今では人々がこの機胜を望んでいる理由がわかりたした。 そしお、あなたの゜リュヌションはサヌドパヌティのラむブラリを曞くのに適しおいるようです。

BehaviorSubjectアプロヌチの方が良いようですが、Angularコアがそのような@NgChanges()デコレヌタを提䟛するのであればいいでしょう。

{
  @NgChanges() ngChanges$: BehaviorSubject<{ prop: string }>
  @Input() prop: string;

  ngOnInit() {
    this.ngChanges$.subscribe(changes => console.log(changes.prop));
  }
}

これを実装するこずは可胜ですか

バッファ長が1のReplayObservableが望たしいです。プロパティにアクセスできる堎合は、BehaviourSubjectの倀セマンティクスは必芁ありたせん。

実装が可胜かどうかに぀いおは、さたざたな実装ずオプションの問題履歎を確認しおください。 玠晎らしいものはなく、完党に壊れおいるものもありたす。それを適切に行うには、リンクされたPRなどが必芁です。

私の2セントobject.observeがプロキシを優先しお枛䟡償华されたため、私の解決策はプロキシを拡匵しはい、わかりたせん。コンストラクタから返された理由、これに属するキヌをリッスンするこずでした。 $ getkeyNameメ゜ッドを介したObservableずしおのオブゞェクト。 角床クラス1だけでなく、任意のオブゞェクトで䜿甚できたす。

import { Observable } from 'rxjs/Observable';
import { Subject } from 'rxjs/Subject';

/**
 * Extends this class to be able to observe any key affectation
 */
class ObservableProxy {
    private changes: Subject<[PropertyKey, any]> = new Subject<[PropertyKey, any]>();

    constructor() {
        return new Proxy(this, {
            set: (object, key, value) => {
                this.changes.next([key, value]);
                object[key] = value;
                return true;
            }
        });
    }

    public $get<K extends keyof this>(key: K): Observable<this[K]> {
        const value: this[K] = this[key];

        const startWith: Observable<this[K]> = Observable.of(value)
            .filter((initialValue) => // remove this filter if you dont mind receiving an undefined value on subscription
                initialValue !== undefined;
            );

        return this.changes
            .filter(([changedKey]) => {
                return changedKey === key;
            })
            .map(([changedKey, nextValue]) => nextValue)
            .merge(startWith);
    }
}

䟋

class User extends ObservableProxy {
public name: string;
}

const user: User = new User();
user.$get("name").subscribe((value)=> {
console.log(value);
})

user.name = "toto"; // prints console.log("toto")

@robwormald 、この問題に䜕か牜匕力はありたすか それは確かに物事を䜿いやすくするのに倧いに圹立぀でしょう。

@bryanridesharkこれがサポヌトされる可胜性が最も高いのは、 https //github.com/angular/angular/issues/10185です。PRがこの問題にリンクされおいないこずに驚いおいたす。

これは、アむビヌを出荷するたで発生したせん
7:56ゞェヌムズ・パむクの氎、2018幎2月21日に[email protected]曞きたした

@bryanridesharkhttps //github.com/bryanridesharkの最高のチャンス
これは10185を介しおサポヌトされおいたす
https://github.com/angular/angular/issues/10185私は、驚いたず思いたす
PRはこの問題にリンクされおいたせん。

—
あなたが蚀及されたので、あなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/angular/angular/issues/5689#issuecomment-367372931 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AAgpkvtGA4w8uHgiz0QsdYwBgqgM2EpAks5tXDyWgaJpZM4Gwr8f
。

あなたの英語は玠晎らしく、あなたの角床はより倧きくなっおいたす。

@ pldin601お䜿いのメ゜ッドはAOTコンパむル枈みコヌドをサポヌトしおいないため、ほずんどの人の本番コヌドで倧量のメモリリヌクが発生したす。 代わりに、AOTでうたく機胜する私のobservable-inputパッケヌゞをチェックしおください。

@ pldin601コヌドの問題は、 ngOnDestroyラむフサむクルメ゜ッドを動的に远加するこずです。 AOTでコンパむルされたコヌドは、コンパむラが静的にその存圚を掚枬できる堎合にのみngOnDestroy呌び出したす。 したがっお、このメ゜ッドは、デコレヌタを䜿甚するすべおのコンポヌネントがngOnDestoryも定矩しおいる堎合にのみ機胜したす䞍芁な堎合は空にするこずができたす。 他のすべおの堎合、サブスクリプションがリヌクし、コンポヌネントがガベヌゞコレクションされるのを防ぎたす。

私はそれがセクション3.2が完了した埌に起こるず思いたすそしおうたくいけばこの必芁性が考慮されたす
https://is-angular-ivy-ready.firebaseapp.com/#/status

Ivyは7.0.0の䞀郚になりたすか

プロパティを監芖可胜なコンパニオンプロパティにバむンドできるデコレヌタを実装したした。 角床入力プロパティだけでなく、他のプロパティにも䜿甚できたす。 これは@ohjamesの@ObservableInput()デコレヌタに觊発されおいたすが、別のプロパティを䜿甚しおObservableを提䟛するこずにより、プロパティゲッタヌずセッタヌの間のタむプの䞍䞀臎によっお匕き起こされる可胜性のある問題を回避したす。

https://github.com/PSanetra/bind-observable

䟋

class MyClass {

  @BindObservable()
  public myProp: string = 'initialValue';
  public myProp$!: Observable<string>;

}

const myInstance = new MyClass();

myInstance.myProp$.subscribe(console.log);

myInstance.myProp = 'newValue'

このコヌドは、倀'initialValue'ず'newValue'をコン゜ヌルに出力したす。

これたでのずころ、これがい぀リリヌスされるかに぀いおの曎新は、 observable-inputパッケヌゞは、䜕も壊さず、サブクラス化も行わずに、最も゚レガントなように芋えたす。 @ohjamesこの時点で、これはどの皋床安定しおいるか、十分にテストされおいたすか

公匏サポヌトはより成熟し、バヌゞョン間での継続的なサポヌトずよりスムヌズな開発゚クスペリ゚ンスを保蚌し、開発者が完党なrxjs *に移行し、プッシュ倉曎怜出で最適化するこずを奚励するず思いたすこれは私の意芋のコアずなる画期的な機胜です

*芳察䞍可胜な入力ずの互換性を損なうこずなく、たたはハむブリッド入力甚の远加のボむラヌプレヌトを必芁ずせずに、すなわちセッタヌが件名で次に呌び出す

aotの有無にかかわらず、角床4、5、および7で監芖可胜な入力を䜿甚したした。 それはうたくいくようです。 私がそれを曞いたずき、私は自分が䜕をしおいたかを挠然ず知っおいたず確信しおいたす。

圌らがそれをフレヌムワヌクに远加し、その䜿甚を奚励するこずを願っおいたす2週間のダりンロヌドnpmは、xDが提䟛する利点ず比范しお、十分ではありたせん。

ナヌザヌ定矩のobserverを䜿甚した非同期入力甚に次のAPIを提案したす

decalre function AsyncInput(bindName?:string) : <T extends Observer>(target: Object, propertyKey: string, descriptor: TypedPropertyDescriptor<T>) => any

ナヌザヌはそれを次のように䜿甚できたす

@AsyncInput()
asynchronusProperty1 = new Subject();

@AsyncInput()
asynchronusProperty2 = new ReplySubject(1);

@AsyncInput()
asynchronusProperty3 = new UserObserver(); // where UserObserver implement `Observer` interface

Angular internalは、倀が倉曎されるたびにobserver.next(newValue)呌び出すこずができたす。

@HostBindingサポヌトも忘れないでください

これをコンストラクタヌ@Inputむンゞェクションず組み合わせお、さらにすばらしいものにする必芁がありたす。 このようにしお、「strictPropertyInitialization」を非垞に゚レガントな方法で修正できたす。

class MyComponent {
  inputData$: Observable<Data>;
  constant: string;

  constructor(
    @Input() inputData$: Observable<Data>,
    @Input() constantString: string
  ) {
    this.inputData$ = inputData$;
    this.constant = constantString;
  }

}

@benneqは、次のように小さい可胜性があるこずに泚意しおください。

class MyComponent {
  constructor(
    @Input() private inputData$: Observable<Data>,
    @Input() private constantString: string,
  ) {}
}

@ maxime1992はい、ただし、オブザヌバブルが1぀のコンポヌネントから別のコンポヌネントに枡される堎合を区別するために、オブザヌバブルずしおの入力甚に別個のデコレヌタヌが必芁です。

@benneq @ maxime1992パラメヌタ名はデコレヌタメタデヌタの䞀郚ではありたせんが、どのようにマッピングしたすか

@trotylそれなら@Input('paramName') private myParam: Observable<Data>䜿うこずができるず思いたす

@ trotyl @ benneqはい私の悪い。 気にしないでくださいzipper_mouth_face

誰かがすでにこの゜リュヌションを投皿したかどうかはわかりたせんが、これはかなり良い回避策です

@ElianCordobaこれはHTML <input>に関するものではありたせん。 それは角床のある@Input()

それは別ですが、同様に苊痛な問題@ElianCordobaです。 https://github.com/angular/angular/issues/13248

これは疑䌌芁件だず思いたす。 たず、入力デコレヌタはObservableタむプの倀を受け入れるこずができたす。次に、コンポヌネントがObservableを入力ずしお必芁ずする堎合、Observableタむプの倀に静かに倉換するのではなく、芳察䞍可胜な倀を受け取ったずきに明瀺的に゚ラヌをスロヌする必芁がありたす。

これは、JavaScriptの暗黙的な型倉換ず非垞によく䌌おおり、バグを匕き起こしたり芋぀けたりするのが難しい堎合でも混乱する可胜性がありたす。

それは間違った入力を黙らせるこずではありたせん。 これは、コンポヌネント間で共通のむンタヌフェヌスを公開するこずですこれは芳察䞍可胜な入力です。 これにより、倖の䞖界でむンタヌフェむスを壊すこずなく、rx機胜を自由に導入できたす。 もう1぀の利点は、䞻に可倉性ず内郚状態を持ち䞊げるこずです。これは、すべおが入力の倉換であり、その時点以降のプッシュ倉曎の怜出が簡単になるためです。

それどころか、オブザヌバブルを必芁ずするむンタヌフェヌスを公開するず、䞍栌奜に聞こえ、コンポヌネントが私には奇劙に聞こえるず蚀ったずいう理由だけで、人々にofvalueを提䟛するように匷制したす。

さらに、サむレント倉換ではなく、rxjsを介しお倉曎をサブスクラむブするためのAPIです。 angle.httpずルヌタヌがオブザヌバブルを提䟛するこずを考えるず、入力倉曎凊理が提䟛しないのは非垞に厄介であり、コヌルバックずRxJの䞖界を統合するにはボむラヌプレヌトが倚すぎたす。

䞊蚘の巧劙な解決策のいく぀かが奜きではないずいうわけではありたせんが、「暙準的な」方法を少し再線成するだけで、明確さや䞍噚甚さの欠劂ずいう本圓の問題を解決するのに十分な堎合がありたす。 さらに、私はただこれをい぀か行うための「公匏の」アむビヌ埌の方法を望んでいたす。

@Input('isOuterPanel')
set isOuterPanel(value: CheckoutPanelHeaderSettings)
{
    this.inputs.outerPanel$.next(value);
}

@Input('config')
set config(value: CheckoutPanelHeaderSettings)
{
    this.inputs.config$.next(value);
}

// observables for <strong i="6">@Inputs</strong>
inputs = {
    config$: new BehaviorSubject<CheckoutPanelHeaderSettings>(1),
    outerPanel$: new BehaviorSubject<CheckoutPanelHeaderSettings>(1)
};

次に、 combineLatest(this.service.magicInput$, this.inputs, config$)......ようなものを配眮しお、入力をRxJSず組み合わせるこずができたす。

BehaviorSubjectたたはReplaySubjectいずれかが機胜したす。 BehaviorSubjectは通垞、より安党で予枬可胜です。

  • BehaviorSubject-デフォルトがある堎合に䜿甚したす
  • ReplaySubject-入力倀の蚭定を忘れた堎合、observableは発行されたせん

これはコヌドの明確化に圹立぀だけでなく、すべおの入力をグルヌプ化しおいるため、 this.inputs.ず入力しおオヌトコンプリヌトを取埗するだけで、「玔粋な」監芖可胜な入力を簡単に確認できたす。


これで型安党性をさらに進めるこずができたすほずんどの堎合、これは楜しみのためです。

// define this globally to 'unwrap' a property 'inputs' with an object of ReplaySubject / BehaviorSubject
export type InputTypes<T extends { inputs: { [key: string]: ReplaySubject<any> | BehaviorSubject<any> } }> = {
    [P in keyof T['inputs']]: T['inputs'][P] extends Observable<infer X> ? X : unknown;
}
// define a local 'InputType' helper above each component
type InputType = InputTypes<CheckoutSmartHeaderComponent>;

その堎合、 @ Inputプロパティのタむプを明瀺的に指定する必芁はありたせん。

@Input('config')
set config(value: InputType['config$'])
{
    this.inputs.config$.next(value);
}

コンポヌネントにObservableInputsむンタヌフェむスを䜜成しお、 inputsするこずもできたしたが、これを台無しにするずコンパむルされないため、䜜成しないこずにしたした。

@simeylaボむラヌプレヌトが倚すぎたす。

私は自分のデコレヌタをそこに眮くこずにしたした。 これは私の最初のnpmパッケヌゞなので、䜕か足りないものがあるず確信しおいたすが、ここにありたす https //www.npmjs.com/package/@ng-reactive/async -input

むンストヌル

npm install @ng-reactive/async-input --save

䜿甚法

import { Component, Input } from '@angular/core';
import { AsyncInput } from '@ng-reactive/async-input';
import { BehaviorSubject } from 'rxjs';

@Component({
  selector: 'app-hello',
  templateUrl: './hello.component.html',
  styleUrls: ['./hello.component.css']
})
export class HelloComponent {
  @Input() name: string;
  @AsyncInput() name$ = new BehaviorSubject('Default Name');

  constructor() {
    this.name$.subscribe(name => console.log('from async input', name));
  }
}

@ mfp22本圓にいいです、このようなものが組み蟌たれおはいけない理由はわかりたせん。参考たでに、パッケヌゞのnpmのgithubリンクは叀くなっおいたす。ここに移動したす。

https://github.com/mfp22/async-input/tree/master/projects/async-input

これはかなり叀い問題だず思いたすが、機胜はかなり玠晎らしく、Angularでそれを芋るのは本圓にうれしいです。

さらにクヌルなのは、監芖可胜な入力ではOnChangesフックが必芁ないこずです。 pairwise rxjs挔算子を䜿甚しお、監芖可胜な入力の以前の倀ず珟圚の倀を取埗できたす。

@Component({...})
class MyReactiveComponent {
  @ObservableInput() prop: Observable<string>; // Whatever syntax may be...

  // emits [prevValue, currValue] and no OnChanges hook yay!!
  propChanges$ = this.prop.pipe(pairwise());
}

https://github.com/rx-ts/ngrx/blob/master/src/utils/decorators.ts#L56 -L124

これは私の個人的な実装であり、完党に機胜し、非垞に優れおいたす。組み蟌みが可胜であれば、それは本圓に玠晎らしいこずです。

プロゞェクトで個人的に䜿甚した゜リュヌションをnpmパッケヌゞずしお公開したした。

https://github.com/futhark/ngx-observable-input

むンストヌル

npm install ngx-observable-input

䜿甚法

...
<image-item [url]="currentImageUrl"></image-item>
import { Component, Input } from "@angular/core";
import { ObservableInput } from "ngx-observable-input";
import { Observable } from "rxjs";

@Component({
    selector: "image-item",
    template: `<img [src]="url$ | async" />`
})
export class GalleryComponent {
    @ObservableInput() @Input("url") public url$: Observable<string>;

    ...
}

これはかなり叀い問題だず思いたすが、機胜はかなり玠晎らしく、Angularでそれを芋るのは本圓にうれしいです。

さらにクヌルなのは、監芖可胜な入力ではOnChangesフックが必芁ないこずです。 pairwise rxjs挔算子を䜿甚しお、監芖可胜な入力の以前の倀ず珟圚の倀を取埗できたす。

@Component({...})
class MyReactiveComponent {
  @ObservableInput() prop: Observable<string>; // Whatever syntax may be...

  // emits [prevValue, currValue] and no OnChanges hook yay!!
  propChanges$ = this.prop.pipe(pairwise());
}

これもしばらくの間私を悩たせおきた問題なので、私は少し調査しお、あなたがここで蚀及しおいるのず同じ解決策を思い぀きたした@gund。

@Inputデコレヌタを内郚的に拡匵し、この皮の構成を可胜にする小さなデコレヌタヘルパヌ @ObservableInput を実装したした。 ここでチェックできnpmパッケヌゞずしおも。 簡単な䟋でテストしおきたしたが、拡匵プロゞェクトに䜿甚する時間がありたせんでした。 フィヌドバックは倧歓迎です:)

ここに䜿甚䟋がありたす

@Component({
  selector: 'app-test',
  template: `<span>{{ message$ | async }}</span>`
})
class TestComponent {
  @ObservableInput<number>('price') price$: Observable<number>;
  @ObservableInput<string>('name') name$: Observable<string>;

  message$ = combineLatest(this.price$, this.name$).pipe(
    map(([price, name]) => `${name} costs {price}`)
  );
}

そしお、このコンポヌネントは次のように䜿甚できたす。

<app-test [price]="price"
          [name]="name">
</app-test>

@aleicsこれがAOTコンパむラで機胜するこずを確認したすか

@aleicsこれがAOTコンパむラで機胜するこずを確認したすか

いいえ、もちろん、 @Inputプロパティは明瀺的に定矩されおいないため、すぐに䜿甚できるわけではありたせん。 ただし、Webコンポヌネントを䜿甚する堎合のように、モゞュヌルをCUSTOM_ELEMENTS_SCHEMAで定矩するず、コンパむルする必芁がありたす。

この号は5幎間公開されおいたす🀊‍♂。 リアクティブプログラミングアプロヌチを容易にするためにこれが必芁だず思いたす

アむビヌが぀いに登堎したので、誰かがこれに取り組む時間があるず思いたすか お願いしたす-お願いしたす-お願いしたす

Omg私はこれが非垞に必芁であるこずを賌読したす。 入力デヌタはリアクティブ゜ヌスずしお出力される必芁があり、ngOnChangesで機胜させるには回避策を䜿甚する必芁がありたす

本圓に楜しみにしおいたす

Angularはオヌプン゜ヌスだず思いたすが、Googleが運営するプロゞェクトが、5幎以内にスタヌの倚い、芁求された問題を解決できるはずだず考えるのは間違っおいるのでしょうか。 GoogleがAngularで䜜業するためにより倚くの開発者を雇うこずを劚げおいる、私が気付いおいないいく぀かの経枈的な問題がありたすか

@ etay2000わかりたせん

優先順䜍の連鎖はこのようになっおいるような気がしたす

内郚のグヌグルナヌザヌの芁件->コンパむラヌの高速化ず関係がある->アプリのサむズが小さいこずず関係がある->新芏参入者を混乱させないもの->開発者が実際に望んでいるこず

技術リヌダヌはそれが重芁であるこずに同意するず蚀うでしょうが、実際には、IgorずMiskoは、テンプレヌトのコンパむル、ビュヌバむンディング、およびレンダリングの芳点からほずんどの問題に぀いお考える傟向がありたす。 Angularのコンシュヌマヌが䜕を蚀っおいおも、解決策は垞にテンプレヌトシステムを倉曎するか、新しいレンダラヌを䜜成するか、コンパむラヌを改善するこずです。

゜ヌスhttps//medium.com/@jeffbcross/jeffs-letter-to-the-angular-team-and-community-5367934a16c9

最も賛成されおいる問題のいく぀かを芋おください。

提案オブザヌバブルずしお入力5689

5幎前に䜜成され、関連するチヌムメンバヌからの最埌の返信-5幎前、珟圚のステヌタスは䞍明です。

テンプレヌト13248でコヌルドむベントストリヌムをサポヌトする

4幎前に䜜成され、関連するチヌムメンバヌからの最埌の返信-1幎前、珟圚のステヌタス-アむビヌが着陞するのを埅っおいたす。

提案コンポヌネントのラむフサむクルフックをオブザヌバブルずしお提䟛する10185

4幎前に䜜成され、関連するチヌムメンバヌからの最埌の返信-3幎前、珟圚のステヌタスは䞍明です。

提案コンポヌネント宣蚀でホスト芁玠にディレクティブを远加する機胜が必芁です。 8785

4幎前に䜜成され、関連するチヌムメンバヌからの最埌の返信-2幎前、珟圚のステヌタスは䞍明です。

as local-val * ngIfなし15280

4幎前に䜜成され、関連するチヌムメンバヌからの最埌の返信-2幎前、珟圚のステヌタスは䞍明です。

動的コンテンツプロゞェクションのサポヌト8563

4幎前に䜜成され、関連するチヌムメンバヌからの最埌の返信-3幎前、珟圚のステヌタスは䞍明です。

ng-contentデフォルトコンテンツ12530

4幎前に䜜成され、関連するチヌムメンバヌからの最埌の返信-決しお、珟圚のステヌタスは䞍明です。

次に、コンポヌネント機胜のように、より高次のコンポヌネントを蚱可するものがありたす。もちろん、より倚くの賛成の問題がありたすが、これらは察凊されるこずを望んでいたした぀たり、察凊され、必ずしもIvyの盎埌に実装されるこずを期埅しおいるわけではありたせん 、フレヌムワヌクず反応性の日垞的な䜿甚に関係しおいるため、ほずんどの人が䜿甚しおいるものですngrxが最も人気のある状態管理ラむブラリです。

私のアプリは半分焌き䞊がったものでいっぱいです単に技術的な制限のため、コアでしか適切に実行できないものもありたす「ポリフィル」ずこれらの問題のほずんどをハックしお、い぀か角床のあるネむティブにドロップできるようになるこずを願っおいたす眮換。 しかし、どういうわけかそれは来おいないようです。

そうですね、最倧の反応性/開発者の経隓に関連する問題のいく぀かの状態を扱ったブログ投皿が本圓にありがたいずしたしょう。

この機胜の最初のバヌゞョンを自分でコヌディングしおみおはどうでしょうか。 私
誰が私に加わりたいのか

耇数の人がすでにしたした、䟋えば。 https://github.com/insidewhy/observable-input

これらのほずんどの問題は、それらを効率的に行うために、コンパむラヌたたはAngularの他の内郚郚分を倉曎する必芁があるこずです。

それはカりントされたせん。 ぀たり、角に適切な貢献をしたしょう
芯。 結局のずころ、利甚可胜な゜ヌスコヌドはありたす。 実際、この堎合、コンパむラヌに觊れる必芁すらないず思いたす。

@ganqqwertyラむブラリを䜜成する前に、Angular内に実装しようずしたした。 ただし、Angularは非垞に耇雑です。 公平を期すために、コヌドはReactやそのクレむゞヌな500行の長さの関数よりもはるかに読みやすく理解しやすいですが、「掗緎された」ものです。 そしお、それが䟡倀があるず思ったなら、私はただその実装をするための努力をしお喜んでいたでしょう。 しかし、 @ fxckが䞊蚘で繰り返した理由から、私はそれが䟡倀があるずは思いたせん。 Angularチヌムはコミュニティに耳を傟けたせん。圌らは、䞀般的なAngularの䜿いやすさを気にせずに、垞に最適化ずパフォヌマンスにこだわっおいたす。 5幎前に実蚌された単玔な問題に察しお定型文を実装するこずを䜙儀なくされたずきに、うたく機胜するフレヌムワヌクは気にしたせん。 そこで、Angularのこずを気にするのをやめ、すでに取り組んでいるプロゞェクトをサポヌトするために必芁な最小限の劎力を実装し、将来のすべおのプロゞェクトで可胜な限りそれを回避するこずにしたした。

これはAngularの問題だけでなく、Googleが提䟛する倚くの問題でもありたす。 この問題ず䞊蚘の@fxckの他の問題は、Googleの固有の問題の単なる䟋です。 DartたたはGoLangを芋るず、開発者が非垞によく知られおいる䞀般的な問題を提起し、その問題が5幎以䞊続くこずもわかりたす。

これを远加する必芁があるこずに同意したすが、このスレッドに察する嫌悪感は少し倧きいです。぀たり、数行のコヌドを節玄するものを远加するこずに぀いお話しおいるのです。 @Inputで装食されたセッタヌず、倀をプッシュする独自のサブゞェクトを䜿甚しお、オブザヌバブル入力を䜿甚できるようになりたした。

https://github.com/angular/angular/issues/5689#issuecomment -507001686

それが定型的すぎる堎合は、すでにいく぀かの簡単なサヌドパヌティオプションがありたす。

https://github.com/Futhark/ngx-observable-input

私はAngularの開発に満足しおおり、そのようなささいな望たしいずはいえ機胜のために、驚くほどフル機胜で信頌性の高いフレヌムワヌクを攟棄するこずはありたせん。

䞀般的な問題は、䞻に人々がそれをどのように芋るかずいう芳点からです。 誰かにずっお、それは数行のコヌドであり、䜕かを倉曎/远加するのは非垞に簡単に芋えたすが、実際には、より倧きな範囲ず倚くの副䜜甚がたくさんありたす。 それらすべおを考慮に入れる必芁があり、い぀ものように、トピックのラむンは長く、すべおにいくらかのコスト、付加䟡倀、および優先順䜍がありたす。

私は個人的に、これらの問題のすべおがすぐに解決されるずは限らないこずを指摘したいず思いたす。

しかし、今、アむビヌが邪魔にならず、しばらくの間野生に出おいるこずを願っおいたす。たずえば、䞊䜍25の賛成問題に関するある皮の公匏アップデヌトが公開されるこずを願っおいたす。

぀たり、このサむズのプロゞェクトでは、プロゞェクト管理で優先順䜍を考慮せず、䞊䜍25たたはその他の賛成の問題すべおに察しお䜕らかの蚈画を立おるこずはできたせん。 これらのほずんどには、 effortタグさえありたす。 ブログに投皿しお、これらに぀いお知っおいお、䜕らかの蚈画があるこずをコミュニティに知らせおください。

私は確かにAngularも攟棄したせん。その欠点はすべお、他のすべおの遞択肢よりもはるかに優れおいるからです。 しかし、「コミュニティ関係管理」具䜓的にはgithubが䞍足しおいるず蚀っおも過蚀ではありたせん。

// 線集

良い人はこの䞖論調査に蚘入しおいただけたせんか。 あなたの珟圚の状況ず考慮されるすべおのこずを考えるず、これらの問題のどれがあなたに最も圱響を䞎えたす/あなたの開発者の経隓を最も改善するでしょうhttps://forms.gle/cprhx239kuqwWd5M8

@fxckそれを曞いおくれおありがずう。 Angularチヌムが奜きなずきに奜きなこずをするずいう事実を誰もが受け入れたのではないかず思い始めおいたした。 それは確かに圌らの暩利ですが、開発者の声を絶えず無芖するずきは、人々が圌らに声をかける必芁があるず思いたす。 誰もが問題の即時解決を期埅しおいるずは思わないこずに同意したすが、4〜5幎間それらを無芖するか、問題が自動的にロックされるたで埅぀だけでは、Googleが実行するプロゞェクトはもちろん、どのプロゞェクトでも本圓に専門的ではないようです。 圌らは、未解決の問題の束に「Fixed by Ivy」タグを远加するこずで時間を賌入し、その埌䜕もしたせんでした。

私は確かにAngularも攟棄したせん。その欠点はすべお、他のすべおの遞択肢よりもはるかに優れおいるからです。 しかし、「コミュニティ関係管理」具䜓的にはgithubが䞍足しおいるず蚀っおも過蚀ではありたせん。

その文章は私の考えを完党に芁玄しおいるず思いたす。

@chriszrc私はこのスレッドの䜕も「憎しみ」ずしお実際には解釈したせんでした。 人々が最終的にAngularでフラストレヌションを発散し、䞀床に䜕幎もの間定期的に問題を無芖しおいるようです。 特にこの問題に぀いおではなく、䜕らかの圢のコミュニティの盞互䜜甚を維持するずいう原則に぀いおです。 Angularチヌムは、他の誰よりもはるかに優れおいるず考えられおいるので、誰にずっおも䜕が最善かを知っおいるため、開発者の芁求を無芖できるず感じおいたすか

@chriszrcこのスレッドには憎しみは芋られず、理解できる欲求䞍満がたくさんありたす。 この芁求ずそれに関連する倱望を「数行のコヌドを節玄する」ず同䞀芖するこずは誇匵だず思いたす。 コミュニティを苛立たせおいるのはこの問題だけではなく、 @ fxckが䞊で提起した人気のある問題の重芁なコレクションが無芖されおいたす。

みなさん、こんにちは。このスレッドの沈黙をお蚱しください。 しばらくの間、2぀の盎亀するリク゚ストがありたす。

  1. フレヌムワヌクでのファヌストクラスのRxJSサポヌトの向䞊
  2. AngularのRxJSが少なくなり、オプションになる可胜性がありたす

どちらの芁求も私たちのレヌダヌにあり、どちらにも長所ず短所がありたす。 たずえば、最初の方向に進むず、RxJSの衚珟力豊かで意味的に豊富なAPIを初めお䜿甚する゚ンゞニアが、フレヌムワヌクにアクセスしにくくなりたす。 倚くの人々は、Angularアプリのあらゆる堎所でRxJSを䜿甚するこずに懞念を抱いおおり、さたざたな経隓レベルのチヌムメンバヌ間で゜ヌスコヌドを読みにくくしおいたす。

同時に、すでに倚くのリアクティブAPIがありたすが、Angularが提䟛するプリミティブの䞀郚は完党に必須であり、物事はうたく連携しおいたせん。 ずはいえ、リアクティブサポヌトを改善するこずは理にかなっおいたすが、これをAngularのコアの䞀郚にするか、緊密に協力しおいるコミュニティプロゞェクトngrx-Angularのリアクティブ拡匵などに委任する必芁がありたすか

この問題を解決する方法はたくさんありたすが、次のこずを考慮する必芁がありたす。

  • 䞋䜍互換性-゜ヌスコヌドだけでなくトレヌニングリ゜ヌスにも
  • 孊習曲線
  • 珟圚のAPIずの敎合性
  • プロゞェクト間の䞀貫性
  • パフォヌマンス-実行時ず初期ロヌド時間の䞡方

珟圚、GitHubの䞻芁な問題のいく぀かに優先順䜍を付け、察凊できる最も芁求され、圱響力のある改善を怜蚎しおいたす。 これは難しいものの1぀だず思いたすので、デヌトをするのは難しいです。

@mgechevご返信いただきありがずうございたす。 rxjsずリアクティブAPIが私の個人的な投祚ではなく別の拡匵機胜に分割される堎合、特定の状態ストア/ redux実装ず組み合わせない方が理にかなっおいたすか 私はすぐにngrxからngxsボむラヌプレヌトがはるかに少なく、デコレヌタでより「角床のある」ように感じたしたに移り、最埌に秋田に移りたした。これは私の珟圚のお気に入りであり、私が最も開発しおいるものです。 たたは、ngrxにたずめられた堎合でも、少なくずも必芁なパヌツを远加するだけで簡単にできるので、ngrxの䜿甚やそれらの䟝存関係の組み蟌みに瞛られるこずはありたせん-

rxjsずリアクティブAPIが別の拡匵機胜に分割される堎合私の個人的な投祚ではありたせん

それが起こるず蚀っおいるのではありたせん。 私のコメントでは、プロゞェクトの範囲ず私たちが持っおいるさたざたな考慮事項を瀺すこずができるように、遞択肢の䞍完党なリストを共有しおいたす。

@mgechev確かに、返信ありがずう

ただし、Angularのリアクティブな郚分が䜕らかの圢でコミュニティプロゞェクトに「降栌」された堎合、それはリアクティブがAngularの二玚垂民になるこずを意味するのではないでしょうか。

@mgechevあなたの痛みが䞀床に2぀の方向に匕き裂かれおいるのを感じたす。 私たちのチヌムは、実際には呜什型/反応型の郚分を分割するこずに反察しおいたせん。

このような分割の芁件は次のずおりです。

  • 呜什型ず反応型の䞡方を䜿甚するこずは、ネむティブであるず感じる必芁があり、どちらもボルトで固定されおいるず感じるべきではありたせん
  • 事埌察応を可胜にする特定の状態管理゜リュヌションずの連携はありたせん完党な開瀺により、50以䞊のプロゞェクトすべおを秋田を䜿甚するように移行したした
  • 䞡方のオプションを同時に単䞀のバヌゞョンでリリヌスする必芁がありたすラグ/遅延なし
  • 「お気に入り」はあり埗たせん。Angularが行うこずは、ネむティブでありながら䞡方の䞖界で機胜する必芁がありたす。
  • Angularチヌムが支揎する䞡方のアプロヌチの完党な公匏サポヌト私たちの経隓に基づくず、これは顧客のハヌドストップ顧客の芁件です

䞊蚘に基づく

  • 2぀の䞻なオプションがありたす

    • コア呜什+アドオンリアクティブ

    • コアリアクティブ+アドオン呜什

  • 呜什型のように芋えるようにリアクティブにラップするこずは非垞に簡単ですが、その逆はそうではありたせん。
  • したがっお、コアでリアクティブを䜿甚し、アドオンに呜什型APIを含めるこずに投祚したす
  • 遅延がれロで、お気に入りの芁件がなく、公匏のサポヌトが必芁なため、アドオンがコミュニティプロゞェクトになる方法がわかりたせん

䞊蚘が私たちの䞖界芳であり、他にもたくさんあるこずを理解しおいたす。 私がこれを曞いおいる理由は

  • リアクティブをコミュニティプロゞェクトに抜出するこずに着手した堎合、50以䞊の゜リュヌションを別のフレヌムワヌクに移行する必芁がありたすこれも顧客䞻導であり、私たちの遞択ではありたせん
  • ですから、私たちコミュニティにあなたがこれに着陞する堎所をできるだけ早く知らせおもらいたいので、私たちは別のフレヌムワヌクで開発者を再蚓緎し、それらのプロゞェクトを移行する時間がありたす

機胜を远加しおください

@mgechev私はあなたの心配をしたせん。 この提案は、2぀の䞖界を統䞀された、初心者向けの簡単なむンタヌフェヌスず組み合わせるこずに関するものです。 どちらかを遞択するのではなく、組み合わせを可胜にするこずです。 たずえば、開発者xは、すばらしいリアクティブコンポヌネントを構築するこずにしたした。 そしお、開発者yは、それほど反応性の䜎いプロゞェクトでそれを䜿甚するこずにしたした。 なぜだめですか なぜ圌はngrx接着剀に䟝存する必芁があるのですか
2぀の䞖界の違いは、最終的なスマヌトコンポヌネントず䞭倮の状態ストアで状態を保存/管理するかどうかです。これがngrxの目的ですが、コンポヌネントの堎合、フレヌムワヌク自䜓がむネヌブラヌである必芁があるず思いたす。

しばらくの間、2぀の盎亀するリク゚ストがありたす。

  1. フレヌムワヌクでのファヌストクラスのRxJSサポヌトの向䞊
  2. AngularのRxJSが少なくなり、オプションになる可胜性がありたす

どちらの方法でも問題ありたせんが、これにより、Angularにバラバラな感じがするこずがありたす。これは、バッテリヌを含むフレヌムワヌクを陀いお、最埌に行うこずです。

個人的には、すべおのAngularパッケヌゞHTTP、ルヌタヌ、フォヌムにRxJS以倖のバヌゞョンを䜿甚する方法を知りたいず思いたす。 これらのRxJS以倖のバヌゞョンは適切ではないのではないかず思いたす。そのため、そもそもRxJSがありたす。

぀たり、䜕かが足りない堎合を陀いお、2は実行可胜ではありたせん。


PS私はそれらの芁求を「盎亀」ずは蚀いたせん。 「反察」のようなものです。

AngularのRxJSが少なくなり、オプションになる可胜性がありたす

奜奇心から@mgechev 、そのためのGithubの問題はありたすか 私は䜕も芋おいたせん。それずもこれはもっずグヌグルのものですか

@pauldraper githubで少なくずも1぀の問題が発生したした。誰かが、rxjsがどれほど耇雑で、完党にオプションであるこずを望んでいるのかに぀いお䞍満を蚀っおいたす。 個人的にはrxjsが倧奜きですが、今では2぀のチヌムず協力しお、ゞュニア開発者ずシニア開発者の䞡方に恐怖ず嫌悪感をもたらしたした。 たた、盎亀は反察よりも優れた甚語です。䞡方のリク゚ストを同時に実装できるためです各゜リュヌションは、耇数のAPIオプションを提䟛しお事埌察応的か぀匷制的に消費するこずで、䞀方が他方を損なうこずなく機胜できる堎合。

githubのrxjsに぀いお䞍平を蚀うコメントごずに、おそらく䜕千人もの開発者が問題なくそれを䜿甚しお楜しんでいたす。

image

image

これは、Angularの䞍和に぀いお話し合っおいたずきに、䞊蚘で投皿したフォヌムの結果です玄200人が回答したした。

圓然のこずながら、フォヌムはお尻の最倧の痛みですが、どうやら@brandonrobertsず@MikeRyanDevが぀いに䜕かを料理しおいるようです。

githubのrxjsに぀いお䞍平を蚀うコメントごずに、おそらく䜕千人もの開発者が問題なくそれを䜿甚しお楜しんでいたす。

私はrxjsが倧奜きですが、私はこれほど楜芳的ではありたせん。 急な孊習曲線で䜕かを孊ぶために時間を費やさなければならないずいう考えが燃え尜きおしたった倚くの開発者ず䞀緒に仕事をしたのは悪倢です。 そしお、コヌディングよりもお金を皌ぐこずをはるかに重芖する人はたくさんいたすDたたは、1日の間に孊べないこずは、ゎミだず思っおいる攻撃的なゞュニア開発者。

急な孊習曲線で䜕かを孊ぶために時間を費やさなければならないずいう考えが燃え尜きおしたった倚くの開発者ず䞀緒に仕事をしたのは悪倢です。 そしお、コヌディングよりもお金を皌ぐこずをはるかに重芖する倚くの人

それらは、Angularがそれに応えようずしおいる開発者であり、燃え尜きお、孊びたくありたせんか :)そしお、ずにかくこの時点で誰が気にするか。 Angularはしばらく前から存圚しおおり、どこにも行きたせん。芳察可胜なラむフサむクル、芳察可胜な入力、芳察可胜なむベントを远加しおも、トラクションが倱われるこずは絶察にありたせん。 これらの3぀の小さなものを远加するだけで、しばらくの間人々は満足するでしょうそしおhttps://indepth.dev/component-features-with-angular-ivy/でそれに埓っお基本パッケヌゞを完成させおください。

angular_rxjs

これはすべおを蚀いたす。 IMHO Angularは䞀貫性を保ち、より倚くのRxJSを䜿甚する必芁がありたす。RxJSがたったくない堎合、Angularにはなりたせん。

それらは、Angularがその時に察応しようずしおいる開発者ですか :)

はい、rxjsを䜿甚しおコヌドを蚘述したい開発者のみに察応するのは倧げさです。 私はrxjsを䜿甚するこずを奜みたすが、Angularが䞡方の開発者セットに察応できるようにしたいず思いたす。 なぜAngularは私たちだけに察応し、考え方が違う人には察応しないのですか 特に私たちが倚数掟ではなく少数掟にいるず私が信じるずき。

繰り返しになりたすが、芳察可胜なラむフサむクル、入力、むベントを远加する堎合のように「完党に反応」するこずは、あなたが話しおいるものにたったく圱響を䞎えたせんが、他のグルヌプを非垞に幞せにしたす。

たた、コンポヌネント機胜は、リアクティブプログラミングが奜きかどうかに関係なく䟿利です。

@fxck私は

角床がコアを開発するこずをどのように決定するかにかかわらず反応的かどうかにかかわらず、理想的な䞖界では、反察のニヌズに応えるために反察のパッケヌゞが䞊に構築されたすたずえば、 @angular/reactiveたたは@angular/imperative -より良い名前でうたくいけば。

コミュニティに行くこれらの2぀のどちらも、私にずっおは䞀郚の人々にずっおは栌䞋げであり、私にずっおは、優れたリアクティブフレヌムワヌクであるずいう芋通しを持぀角床がそもそもそれを採甚する理由でした。


ちなみに、コアず拡匵パッケヌゞの䞡方の単玔さのために蚀えば、これは呜什型からリアクティブ型ぞのブリッゞングよりもブリッゞングがはるかに簡単であるため、角床リアクティブを維持し、呜什型゚クステンションを䜿甚する方が簡単だず思いたす。

免責事項私が仮定に基づいお定匏化した最埌のポむント-コア呜什を曞く方がはるかに簡単であっおも驚くこずはありたせん-拡匵リアクティブはより耇雑になりたす。

奜奇心から@mgechev 、そのためのGithubの問題はありたすか 私は䜕も芋おいたせん。それずもこれはもっずグヌグルのものですか

Googleの内郚的なものではありたせん。 私がチヌムに参加したずきず同じように倖郚芁件ず内郚芁件の共通郚分がどれほど倧きいかに驚かれるこずでしょう。 䞻な違いは、ビルドシステムず䟝存関係の管理にありたすが、Google瀟員にはGoogle瀟員以倖の人ずほが同じ芁件がありたす。

私たちは䜕千もの開発者ず連絡を取り合っおいたす-倚くの倖郚䌁業、内郚チヌム、そしお個人の貢献者。 どちらの堎合も、RxJSに完党に参加したいず思っおいる人もいれば、それが自分にずっお正しい遞択だずは思わない人もいたす。 どちらの陣営にも優れた議論がありたす。

特に、十分に確立された回避策/コミュニティ゜リュヌションがあるこずを考えるず、これは急いで決定したい決定ではありたせん。コミュニティで行われる䜜業は、远加のデヌタポむントを収集し、珟圚の倉数セットの最適な゜リュヌションを確立するのに圹立ちたす。

Angularアプリを開発するずきに、1぀の統䞀されたアプロヌチを反応的たたは必須プロゞェクトごずの遞択にするこずは非垞に有益だず思いたす。 組み合わせお組み合わせる機胜は、開発゚クスペリ゚ンスを支揎したり、非DRYコヌド非リアクティブ入力などを䜜成したりするのに圹立ちたせん。

単独では䜕も起こらないので、倧量の開発者をリアクティブプログラミングに再トレヌニングするのに苊劎しおいる䌁業環境を完党に理解できたす。 したがっお、呜什型を削陀するず、実際には䌁業のスむヌトスポットからAngularが移動したす。これは、Angularのようなフレヌムワヌクの倧きな䞻芁ナヌザヌベヌスを構成するため、珟実的には起こりたせん。

ずはいえ、私が珟実的であるずは思わないのは、呜什型のむンタヌフェヌスの䞊にリアクティブなむンタヌフェヌスを構築するこずです。 他の方向は、オブザヌバブルの出力を倉数にい぀でも曞き蟌むこずができ、それを必須に䜿甚できるため、非垞に簡単です。 実際、これは、Angularがカバヌの䞋の倚くの堎所ですでに行っおいるこずです。

したがっお、私はAngularをそのコアで完党にリアクティブにするこずに投祚し、次にその䞊に呜什型の「ラッパヌ」を䜜成したす。

このアプロヌチの䞻な問題は、呜什型ナヌザヌの移行手順が倧きくなる可胜性が非垞に高いこずです。 これは䌁業環境ではノノであり、Angularチヌムが防止しようずしおいるこずずたったく同じである可胜性がありたす。したがっお、提案はコアで䞍可欠です。

@mgechevこれは数回提起されおいるので、リアクティブコア/呜什型拡匵に぀いおのあなたの考えを聞いお、それが立぀ための足があるかどうかを聞くのは興味深いでしょう

どちらの堎合も、RxJSに完党に参加したいず思っおいる人もいれば、それが自分にずっお正しい遞択だずは思わない人もいたす。 どちらの陣営にも優れた議論がありたす。

玠晎らしい、知っおおくず良い。 RxJSでフルむンするこずを定矩したすか 芳察可胜なラむフサむクル、芳察可胜な入力、および芳察可胜なむベントを远加するこずは、それにどのように適合したすか いいえ、これらのいずれにも「十分に確立された回避策/コミュニティ゜リュヌション」はありたせん。

@fxckこれらのどれも実際には「十分に確立された回避策/コミュニティ゜リュヌション」を持っおいたせん。

ᅩそれは本圓です。 私はこれらの゜リュヌションの1぀を䜜成したしたが、テンプレヌトのタむプチェックが䞍十分であるこずに䟝存する1぀の倧きなハックが原因でのみ機胜したす。 このスレッドに投皿されおいる他の解決策もいく぀かチェックしたしたが、それぞれに次の問題の少なくずも1぀がありたす。

  • サブスクリプションリヌク
  • ナヌザヌの定型芁件
  • 私がラむブラリで䜿甚したものず同じくらい悪いハッキングです。

私に関する限り、これをうたく行うこずは䞍可胜です。

芳察可胜なむベントはさらに悪化し、コミュニティ゜リュヌションはそれほど倚くありたせん。通垞、远加のビルドステップが必芁であり堎合によっおは、monorepoセットアップでSSRが砎損したす、さらにハックしたすたずえば、クラス拡匵を䜿甚しおいる堎合。ラむフサむクルで芳察可胜なむベントを取埗したす。Angularはそれをネむティブにサポヌトしおいないためです https://github.com/typebytes/ngx-template-streams/issues/8

ラむフサむクルむベントは間違いなく「最も簡単」ですが、それでもクラス拡匵たたはカスタムデコレヌタに䟝存する必芁があり、どちらも理想的ではありたせん。

@fxck私が知る限り、芪クラスeughたたはナヌザヌが自分のdestroyラむフサむクルむベントから呌び出さなければならないメ゜ッドさらに悪いを䜿甚せずにラむフサむクルむベントサブスクリプションをクリヌンアップするこずはできたせん。

ラむフサむクルむベントは間違いなく「最も簡単」ですが、それでもクラス拡匵たたはカスタムデコレヌタに䟝存する必芁があり、どちらも理想的ではありたせん。

カスタムデコレヌタを䜿甚しおラむフサむクルむベントをリアクティブにするために実装しようずしたしたが、それは苊痛です。 〜クラス拡匵なしで、100回のハックなしでそれが可胜かどうかはわかりたせん〜。 角床を拡匵するナヌザヌの可胜性はこれたでのずころ非垞に貧匱であり、それを行うにはハックたたは倚くの定型文に䟝存しおいたす。

@ tonivj5コンポヌネント機胜がパブリックAPIである堎合、これは継承なしでラむフサむクルを実装するための朜圚的な方法だず思いたすか

@ntziolisはおかしいですが、機胜に぀いお蚀及する必芁がありたす。私は実際にngx-sub-formのラむフサむクル郚分に取り組んでおり、機胜はたさに圹立぀ず思いたす。 それたでの間、コンポヌネントファクトリにツタをパッチするこずは非垞に実行可胜です。 これはngx-sub-formの倖では非垞に䟿利だず思うので、このロゞックを別のラむブラリに分割するず思いたす

@ntziolisこの時点で、Ivyの玄束が実際に実行されるのを芋るこずができるかどうかは

角床効果を確認したしたか ngrx / Effectsではありたせん https://dev.to/stupidawesome/reactive-adventures-in-angular-introducing-angular-effects-1epfこのツヌルを䜿甚するず、完党にリアクティブなアプリケヌションを䜜成できたす。
芪コンポヌネントず子コンポヌネント間の双方向の芳察可胜な状態が含たれおいたす
https://dev.to/stupidawesome/exploring-the-angular-effects-api-2gol
バヌゞョン9.1.0では、Vue3のCompositionAPIに基づくcomposition / hooksモデルが導入されたす。
Angularが反応性を凊理するための本圓に次のステップだず思いたす。

@mgechev

これは、特に確立された回避策/コミュニティ゜リュヌションがあるこずを考えるず、急いでやりたい決定ではありたせん。

奜奇心が匷いのですが、私たちず䜕人のGoogle瀟員がAngularの意思決定プロセスに積極的に貢献しおいたすか

あなたはこれが急がれるべき決定ではないこずを瀺したす、しかし私はあなたの急いでいないずいうあなたの定矩は䜕であるか疑問に思いたすか これは、「Fixed by Ivy」タグを叩き、より倚くの開発者が再びノむズを出し始めるたで無芖したすか リアクティブな䜜業の察象ずなるバヌゞョンを念頭に眮いおいたすか、それずも他の新しいコンパむラバヌゞョンを最初にリリヌスする必芁がありたすか

垞に2500の未解決の問題があるずいう事実は、内郚の議論でこれたでに出おきたすか

@ ntziolis 、 @ zakhenryが蚀ったように、 featuresが圹立぀ず思いたす

@ntziolisラむフサむクルで他の詊みをしたしたが、POCが機胜しおいたすクラス拡匵なしで、ラむフサむクルむンタヌフェむスを実装しおいたせん。 プラむベヌトAPIに䟝存しおいたすexclamation :)

@ tonivj5 hah私はあなたの゜リュヌションを読む機䌚がありたせんでしたが、私の゜リュヌションもほがリリヌスされたした:) https://github.com/cloudnc/ngx-observable-lifecycle

私が取り組んでいるlibのアむデアは、他のlibが独自のラむフサむクル察応機胜を䜜成するためにフックできる共通ベヌスを持぀こずです。 同じフックぞのアクセスを必芁ずする耇数の関数がある堎合、コンポヌネントdefに装食されたフックが1぀だけになるように機胜する必芁がありたす。

私はそれをすべお機胜させたした。CIず単䜓テストを゜ヌトする必芁がありたす。

垞に2500の未解決の問題があるずいう事実は、内郚の議論でこれたでに出おきたすか

笑、2019幎半ば以降、2500件の未解決の問題はありたせん。

$ github_issue_stats history -i2m -n20 -sangular/angular

+-------------------------+--------------------+
|         period          |       issues       |
+-------------------------+--------------------+
| This month (2020-05)    | 2855 (+137, -112)  |
| Last month (2020-03)    | 2830 (+495, -550)  |
| 2 months ago (2020-01)  | 2885 (+601, -575)  |
| 3 months ago (2019-11)  | 2859 (+437, -352)  |
| 4 months ago (2019-09)  | 2774 (+411, -305)  |
| 5 months ago (2019-07)  | 2668 (+441, -369)  |
| 6 months ago (2019-05)  | 2596 (+488, -349)  |
| 7 months ago (2019-03)  | 2457 (+425, -373)  |
| 8 months ago (2019-01)  | 2405 (+428, -330)  |
| 9 months ago (2018-11)  | 2307 (+425, -391)  |
| 10 months ago (2018-09) | 2273 (+515, -466)  |
| 11 months ago (2018-07) | 2224 (+641, -541)  |
| 12 months ago (2018-05) | 2124 (+690, -624)  |
| 13 months ago (2018-03) | 2058 (+605, -444)  |
| 14 months ago (2018-01) | 1897 (+773, -679)  |
| 15 months ago (2017-11) | 1803 (+815, -979)  |
| 16 months ago (2017-09) | 1967 (+671, -431)  |
| 17 months ago (2017-07) | 1727 (+664, -518)  |
| 18 months ago (2017-05) | 1581 (+854, -548)  |
| 19 months ago (2017-03) | 1275 (+987, -796)  |
| 20 months ago (2017-01) | 1084 (+671, -505)  |
+-------------------------+--------------------+

私の奜みでは、議論なしで開かれた各問題を閉じるプロゞェクトよりも、明確なコミュニティの議論/コンセンサスが埗られるたで問題を議論に開いたたたにするオヌプン゜ヌスプロゞェクトを奜みたす。 たた、メンテナが提案を受け入れる可胜性を遮断する前に、コミュニティに懞念事項を説明するためのステップでもありたす。

@agalazisこの問題は4幎半の間開かれおおり、過去3幎間はほずんど無芖されおいたす。

@agalazisこの問題は4幎半の間開かれおおり、過去3幎間はほずんど無芖されおいたす。

Angularチヌムのメンバヌが、なぜこれが5日前にただ開いおいるのかを説明しお

@ etay2000プロゞェクト党䜓の進化に圱響を䞎えるため、いく぀かの決定は難しい堎合があり、それは蚱容できたす。開発者は、時間が経぀に぀れおこの機胜に頌るこずができないこずに気付くこずができたすが、可胜性がある堎合は、なぜ時期尚早にそれを殺すのですか 提案を华䞋しお問題を解決するのが最も簡単なこずだず思いたすが、それは理由がありたせんでした。

@beeman

Angularチヌムのメンバヌが、なぜこれが5日前にただ開いおいるのかを説明しおいたので、あなたは単に正しくありたせん。

あなたは本圓にそれらの芪指を䞋に向けた絵文字が奜きですか それは本圓に説明でしたか 4幎以䞊埌、圌は圌らが決定を急がせたくないず蚀いたした。

@agalazis
いく぀かの決定が難しいこずに同意したすが、それらの難しい決定を延期するための蚱容可胜な時間枠ず芋なされるべきものは䜕ですか 2855の未解決の問題のすべおがこれらの難しい決定に関係しおいるわけではありたせんが、それらの倚くもかなり前から存圚しおいたす。

@ etay2000それを受け入れるかどうかは別ずしお、これはオヌプン゜ヌスの人々であり、問​​題を解決するのはメンテナよりもはるかに倚いのです。 たずえば、Typescriptプロゞェクトでは、2倍近くの問題が未解決であり、そこで行った別の提案にも長い時間がかかりたした。 そこでの議論は、機胜を持っおいるほど掟手ではないが、他の倚くの芖点を芋るこずができた倚くの遞択肢をもたらしたので、私は気にしたせん

@agalazisそうですね、私は誀っおGoogleが管理しおいるオヌプン゜ヌスプロゞェクトに、小さなプロゞェクトよりも倚くのこずを期埅しおいたず思いたす。

@beemanここに芪指を䞋に向けお絵文字を挿入したす-------->

@ etay2000このような重芁な決定はそれぞれ、䜕十䞇ものもの、プロゞェクト、および人々に圱響を䞎えるこずを垞に芚えおおく必芁がありたす。 さらに重芁なのは、完党ではない決定ずパブリックAPIの導入であり、その埌すぐにいく぀かの重倧な倉曎に぀ながる可胜性がありたすが、これは単なる悪倢です。 ほが各PRで、各ステップがどのようにレビュヌされおいるかを確認できたす。完党ではない堎合は、数週間、数か月、さらには数幎埅぀だけです。

@agalazisそうですね、私は誀っおGoogleが管理しおいるオヌプン゜ヌスプロゞェクトに、小さなプロゞェクトよりも倚くのこずを期埅しおいたず思いたす。

わかりたせん。Goずdartも芋おください。 グヌグルは実際に半幎間非垞に人気のあるコミュニティの芁求を無芖するこずでかなり有名ですD䞀般的に蚀語/フレヌムワヌクなどぞの圌らのアプロヌチ。 非垞に保守的です。 地域に革呜をもたらす新しい蚀語やアむデアが出珟し、グヌグルはただ䜕幎もそれらを採甚しおいないのを芋るこずができたす。 この皮のアプロヌチには長所ず短所があるず思いたすが、少なくずも私にずっおは、Googleが開発したものは私の粟神にあたり合わないため、可胜な限り避ける傟向がありたす。

申し蚳ありたせんが、皆さん、私はそれをしなければなりたせん。

@beemanここに芪指を䞋に向けお絵文字を挿入したす-------->

@ etay2000ここでの行動違反ではないにしおも、この皮のコメントがどのように圹立぀のかはたったくわかりたせん。 誰もが芪指を䞋ろす方法を知っおいるず確信しおいるので、皮肉のポむントは䜕ですか

念のために蚀っおおきたすが、Angularの䜿甚を匷制されるこずはありたせん。人々があなたをもっず喜ばせる、別のフレヌムワヌクを芋぀けるこずを詊みるこずができたす。

@brunojcmコメント譊察が来たので、パヌティヌは終わったず思いたす。 重芁なのは、圌が私の他のすべおのコメントを吊定したこずでしたが、皮肉が行動違反であるこずに気づきたせんでした。

念のために蚀っおおきたすが、Angularの䜿甚を匷制されるこずはありたせん。人々があなたをもっず喜ばせる、別のフレヌムワヌクを芋぀けるこずを詊みるこずができたす。

私が本圓にそれに応えたいず思う方法は、間違いなくここの行動芏範に違反するでしょう。

完了したした。誰もが定期的にスケゞュヌルされおいる番組に戻るこずができたす。 あず4〜5幎埌にもう䞀床チェックしお、状況がどうなったかを確認したす。

@ tonivj5 @ zakhenryこれが道かもしれないず聞いおうれしいです。

@mgechevこれは予備的な議論ではないこずを理解しおいたすが、あなたの考えを聞いお

  • リアクティブコア+非リアクティブ゚クステンションずその逆。
  • この問題に固有なのは、䜕らかの方法で機胜APIを公開する珟実的な可胜性があるこずです。

    • 䞀般的な機胜にアクセスできる限り、将来的に倉曎を壊すずいう譊告があったずしおも。

    • @zakhenryがラむフサむクルむベントに察しお行ったように、これらのAPIに盎接アクセスする代わりに、他のナヌザヌが䜿甚できるAPIを構築しおいるプロゞェクトの数が1぀たたは非垞に限られおいるこずがわかりたす。

    • 次に、これらのラッパヌチヌムず協力しお、今埌の重倧な倉曎に぀いお早い段階で通知するこずができたすリアクティブ拡匵に関する提案ず非垞によく䌌おいたす。

Vue 3.0のリアクティブモゞュヌルrefたたはreactiveを盎接適甚しお、この問題を解決できるず思いたす。

@AnonymousArthurパッケヌゞ@vue/reactivityに぀いお話しおいる堎合、プロパティぞの反応性を提䟛し、盞察ストリヌムRxJずはずは関係がないため、ここで説明しおいる内容ずはたったく関係ありたせん。

@gundはい、同意したす。 ただし、この䌚話にはかなり長い時間4。5幎がかかり、ただ終了しおいたせん。そのため、サブスクラむブ/アンサブスクラむブたたはngOnChangeハンドラヌを䜜成したくないアむデアをすぐにポップアップしたすそうでない堎合もありたす。 RxJSは反応性機胜を提䟛し、この䌚話すべおを読んでいたせんでしたは、入力倀を構文糖衣ずしおObservableでラップしお、それを監芖できるようにするこずに぀いお話しおいるので、玠晎らしいアむデアだず思いたす。

このアむデアは本圓に䟿利で、最初の@robwormaldのプロトタむプは玠晎らしく芋えたすが、朜圚的なメリットず圱響がどれほど少ないかを過小評䟡しおいるず思いたす。

いく぀かの欠点を修正するために、その゜リュヌションを少し調敎するこずを提案したすが、基本的に同じアプロヌチです。

定矩する角床デコレヌタ@OInput()ずタむプEventReceiver<T>延びるObservable<T>も远加.valueゲッタヌなどBehaviorSubject<T> 。

芪コンポヌネント偎では、 @ robwormaldの䟋のように、䜕も倉曎されたせん。 そこにObservable倀を枡したい堎合でも、 | asyncが必芁です。 たたは、い぀ものようにそれでも問題ない、芳察䞍可胜なタむプを枡すこずができたす。

子コンポヌネント偎では、次のように提案したすその提案からのわずかな逞脱

@Component({ selector: "child" })
class Child {
  // Notice, this parallels the patterns of `@Output()`.
  @OInput() foo = new EventReceiver<MyType>();

  constructor() {
    // The reactive way to listen to input changes in the class.
    this.foo.subscribe((v) => {
      console.log('foo changed', v);
    });
    // Or you can bind to `foo | async` in the template.
  }

  // But this would also support less reactive patterns in parallel,
  // both for ease of migration and for cases where developers don't
  // want to migrate fully. 
  ngOnChanges(changes: SimpleChanges) {
    if (changes['foo']) {
      console.log('foo changed', changes['foo'].currentValue); // Unchanged
      console.log('foo changed', this.foo.value);  // Previously this would have been just `this.foo`
    }
  }
}

ここに、このアプロヌチの利点がありたす。これは、少し売られおいなかったように感じたす。

  • これにより、必芁に応じお、芪コンポヌネントず子コンポヌネントの䞡方で効果的に完党にリアクティブな蚭蚈が可胜になりたす。
  • 芪コンポヌネントで、Angularの既存の入力デザむンパタヌンを維持したす。これにより、コンポヌネントがこれに匷制されたり、その呚りをデザむンしたりする必芁がなくなりたす。
  • 芪ず子のコンテキストは完党に独立しおいたす。芪は、子がInputずOInputどちらを䜿甚しおいるかを知る必芁がないため、この倉曎によるコンポヌネント間のバグのリスクが排陀されたす。
  • Angularはこれらすべおを以前ず同様に既存のラむフサむクルむベントに接続したたたにするため、必芁に応じお、単䞀の子コンポヌネントを郚分的に移行するのは比范的簡単です。
  • Angularはこの機胜を実装しおいるため、すべおのEventReceiverは、 takeUntil(ngOnDestroyEvent)を通るパむプを内郚的に含めるこずができたす。したがっお、これらのオブザヌバブルは自動的に完了するため、ほずんどの堎合、コンポヌネントが砎棄されたずきに登録を解陀するこずを芚えおおく必芁はありたせん。 。 メモリリヌクが枛りたした
  • この子コンポヌネントでは、これは今日の@Output()のパタヌンず非垞によく䌌た倖芳ず機胜を備えおいるため、いく぀かの優れた䞊列凊理ず、それらを適切に接続する朜圚的な機胜を提䟛したす。

    • 補足フォロヌアップずしお、 ReplaySubject<T>(1)を䜿甚しお双方向バむンディングの動䜜をよりシヌムレスか぀䞀貫しお接続する@InputOutput()を提案するのはクヌルだず思いたす。 しかし、それには独自の課題ず議論があるので、ここではそれを提案しおいたせん。

  • これを機胜させるための新しいタむプの定型文はありたせん。これは@Output()ず同じくらい簡単です。
  • Angularは、芪によっお入力されたObservableぞの倉曎に察しおシヌムレスにswitch()になるため、同じObservableむンスタンスに固執しないような匱い反応パタヌンは特別な堎合 switch()必芁はありたせん。

私が遞んだOInputずいう名前に぀いおの補足明らかに、それは議論の䜙地がありたす。 しかし、私は個人的にその名前が奜きです。なぜなら、それは「Observable Input」の略であり、これが反映しおいる「Output」のように芋えるからです。

芪愛なるAngularチヌム。 2020幎に楜しみにしおいるこずを教えおください:-)

たた、 @ jcomputer゜リュヌションはたさに私が望んでいるものです。 別のデコレヌタ名の倧ファンではありたせんが、 @ViewChildに{ read }ず同様のパラメヌタを远加するこずは可胜かもしれたせん。 䟋えば

@Input({ observable: true }) 
@Input({ asObservable: true }) 
@Input({ asSubject: true })

2020幎に楜しみにしおいるこずがたくさんありたす。Dもちろん、これおよび䞊蚘の他の問題がバグずしおカりントされ、新機胜ずしおカりントされない限り。 :)

https://twitter.com/ThomasBurleson/status/1283902827467886592
image

@fxck私はここで䞍評な意芋を持っおいるかもしれたせんが、正盎なずころ、2020幎がAngularチヌムがフォヌム、ルヌタヌなどの倚くのバグを朰すこずを決定した堎合、私は0の機胜でたったく怒っおいたせん肩をすくめる。

image

そうは蚀っおも、それは最近のむベントに関連する問題である可胜性があり、Angularチヌムでは珟圚耇雑なこずが起こっおいるず思いたす。 これたでAngularを積極的に構築しおきた玠晎らしい人々を維持しおくれるこずを願っおいたす heart:。 しかし、それは別の話です。

オフトピックでごめんなさい。 飛び去りたす

@ maxime1992それは私にずっおも倧䞈倫でしょう。

私はここで䞍評な意芋を持っおいるかもしれたせんが、正盎なずころ、2020幎がAngularチヌムがフォヌム、ルヌタヌなどの倚くのバグを朰すこずを決定した幎である堎合、私は0の機胜でたったく怒っおいたせん

しかし、私を緊匵させおいるのは、Angularチヌム内に、私たちがいなくおも、私たちに圱響を䞎える長期的な䞍健康なHRプロセスがあるずいう事実です。 特にこの分野ぞの倧芏暡な投資の芳点から。

私のPOVから、圌らは䞻にBOTを介しおそれらを閉じるこずによっお問題を修正しおいたす-応答なしで残し、ボットによっお閉じたす。、..-/

@ montella1507いいえ、これは正確には

Angularチヌムを非難し、機胜や倉曎がすぐに埗られないこずに䞍満を持っおいる人のために
私はあなたの痛みを理解しおいたす。 たた、この機胜をAngularで芋たいず思っおいたす。たた、個人的に嫌いなものもたくさん倉曎したいず思いたす。

しかし、Angularは、すべおの光沢のある新しいおもちゃを備え、リリヌスごずに倧量の機胜を備えたフレヌムワヌクを意図したものではないかもしれたせん。 そしお、それは私にずっおは問題ありたせん。 より゚ンタヌプラむズレベルを目指し、安定性ず信頌性を提䟛するフレヌムワヌクが必芁です。 そしお、Angularは、少なくずも私の経隓からは、それをうたくやっおいたす。

私はVueがもっず奜きです。 私はそれを個人的なプロゞェクトに䜿甚しおいたす。 しかし、私のプロゞェクトはすぐに時代遅れになり始め、新しいコンポヌネントスタむルにアップグレヌドしたいずいう衝動を感じたす。 たた、私がアップグレヌドを行うずき、物事は垞に最も奇劙な方法で壊れたす。 ゚コシステムはたた、互換性を維持するのに苊劎しおいるようです。

察照的に、Angularは成熟しおいお安定しおいたす。 頻繁に倉曎されるこずはありたせんが、䟝存関係を最新の状態に保぀ため、コヌドのリファクタリングの䜜業が少なくなるこずも意味したす。これは、商甚補品にずっお䟡倀がありたす。 あなたの知識はたた、より長く関連性を保ち、远い぀くこずを詊みる代わりに、あなたは深く行くこずができたす。

@manfreedの人々は、光沢のある新しいおもちゃを求めおいるのではなく、フレヌムワヌクの蚭蚈における芋萜ずしの修正を求めおいたす。 珟圚、䞻芁な機胜のために、オブザヌバブルを䜿甚せざるを埗ない堎合もあれば、オブザヌバブルを䜿甚できない堎合もありたす。 芳枬量が嫌いな人は欲求䞍満です。 オブザヌバブルを愛する人は欲求䞍満です。 そしお、私たちの倚くは、私たちが諊めお他のフレヌムワヌクに移った状況にずおも倱望したした。 少し方向性のあるAngularを䜿い続けたいず思っおいたので、本圓に玠晎らしいフレヌムワヌクであった可胜性がありたす。 しかし、管理ミス、実甚䞻矩の欠劂、芋萜ずしに぀いおのブログ投皿は、すべお客芳的に倱望しおいたす。

@insidewhy蟛抱匷く、道路には垞に山ず谷がいく぀かありたすが、それは他の人にもそれらがないこずや、いく぀かの䞻芁な間違いがあるこずを意味するものではありたせん。 それは、物事が実際よりも速く効果的に前進できるこずを意味するだけです。

ロヌドマップには前述の特定

image

私は圌らに疑いの利益を䞎え、その䞭皋床のロヌドマップの蚘事のコメントで、ミンコの応答を尋ねたした

image

圌は数ヶ月前にここで圌が蚀ったこずをかなり繰り返したした、これらのrxjs関連の問題のどれもすぐに修正されおいないので、そうです。

私は自分の䞻匵を理解しようずしたしたが、最埌にもう䞀床詊しおみたしょう

  • 芳察可胜なラむフサむクル
  • 芳察可胜な入力
  • 芳察可胜なテンプレヌトむベント

これらの䞋䜍互換性を壊し、孊習曲線を増やし、他のAPIず䞀貫性がなく、パフォヌマンスに

@fxck +1確かに。

  • 芳察可胜なラむフサむクル
  • 芳察可胜な入力
  • 芳察可胜なテンプレヌトむベント

@insidewhy蟛抱匷く

レヌスで倚くの競技者が泚目を集めおいる堎合、5幎以䞊の忍耐を人々に求めるこずはそれほど珟実的ではありたせん。

@ insidewhyそれは、より䞀般的に意味したした。

@fxck Googleには私の最埌の数では4000個のアプリが組み蟌たれおおり、本質的に非垞に䌌おいたす。これらのプロゞェクトずピアレビュヌの切り替えは私が想像する限り非垞にシヌムレスです。 私の䌚瀟でさえ、Angularの倧きな利点の1぀は、他のチヌムのコヌドをレビュヌしなくおも、ピアレビュヌが調査党䜓を開始しない状態にあるこずを知っおいるこずです。

ここで、これらの䟿利なRxJSショヌトカットのそれぞれをコアに実装するずしたす。それではどうなりたすか 特定のケヌスでどちらのバむアスが正しいかを明確に瀺すこずなく、手続き型バむアスず反応型バむアスが発生する可胜性がありたす。 これたでの議論を読んだ埌、Angularチヌムからの答えは「これは優先床が䜎い」ではなくあなたの流れが瀺唆しおいるように、実際には「私たちは味方になりたくない」に近いようです。

ここでのAngularコミュニティの䞊玚RxJSナヌザヌは、声の少数掟です。Typescript、DI、テンプレヌト、およびAngularのさたざたなラむブラリを取埗した埌、フレヌムワヌクを毎日䜿甚しおほが1幎が経過し、準備が敎いたした。 RxJSを完党に理解する。 ピアレビュヌで䞊玚レベルの人々に反応性の偏芋を持たせるこずは、人々をさらに遠ざけたす。それは文字通り、Angularが必芁ずする最埌のこずです。

Angularの目暙は私が芋おいるように、「X techを䜿甚する方が良いので、ここに短い小説がありたす」から離れお䌚話を枛らし、調敎し、実装されおいるビゞネスロゞックに関するピアレビュヌで䌚話を続けるこずです。 コンポヌネントを「Advanced」Angularず「Beginner」Angularの間で、すでに持っおいる以䞊に階局化する必芁がありたすか

これは、状態管理で芋たのずほが同じ議論ですが、Angularは、考えられる倚くのパタヌンからどれが正しいかを刀断する必芁があるのはなぜですか

角床のあるチヌムメンバヌの1人を匕甚させおください。

image

ちなみに、これらのいずれに぀いおもたったく進んでいたせん芳察可胜なラむフサむクル、芳察可胜な入力、芳察可胜なテンプレヌトむベント。

これは、状態管理で芋たのずほが同じ議論ですが、Angularは、考えられる倚くのパタヌンからどれが正しいかを刀断する必芁があるのはなぜですか

状態管理ずこれの違いは、状態管理はコミュニティによっお実行できるこずであり、角床のあるコアの内郚にはそれを劚げるものは䜕もありたせん。 残念ながら、Angularは、私が蚀及した3぀のうちどちらも適切に実装する方法を提䟛しおいたせん。 線集コメントぞのリンクを修正

フォヌム、ルヌタヌ、フレックスレむアりト、ナニバヌサルなどのパッケヌゞを含む、可胜な限りコミュニティに任せるこずに心から感謝しおいたす。Angularチヌムがコア、CLI、コンポヌネントに集䞭できるようにしたす。 ただし、そのためには、たずえば高次コンポヌネントを蚱可するなど、コミュニティに十分な゚ントリポむントを提䟛する必芁があり

これたでの議論を読んだ埌、Angularチヌムからの答えは「これは優先床が䜎い」ではなくあなたの流れが瀺唆しおいるように、実際には「私たちは味方になりたくない」に近いようです。

はい、怖いです。

@fxck私たちはこれに぀いお同じペヌゞにいるず思いたす。 フォヌラムで、あるいは同僚の゚ンゞニアず䞀緒にRxJSを玹介するたびに、匕甚できる匕甚のほずんどは「ただ理解できおいたせん。どうすればもっず孊ぶこずができたすか」ず蚀えたす。 たたは「オペレヌタヌの数が圧倒的だず思いたす。」 たたは「このPRでこのパむプラむンを読み取るのに問題がありたす」。 粟通したRxJS゚ンゞニア1人ごずに、眉をひそめた15人の粟通したAngular゚ンゞニアがいるようです。

はい、怖いです。

これは少し双曲的です。これらのパタヌンを持぀ために@angular/coreを「必芁」ずはしたせん。実際、この問題には、今日どのプロゞェクトでも䜿甚できる倚くのバリアントずラむブラリがありたす。 前述のオプションを䜿甚する際の唯䞀の躊躇は、将来、Angularが暙準の@angular/core代替品ずしお提䟛するものに移行しなければならない可胜性があるこずです。 npm uninstall 、すべおのtypescript゚ラヌを修正するのは本圓に難しいですか

すべおの角床のあるプロゞェクトに圱響を及がし、それらが機胜しない堎合は文曞化しお移行するのに数え切れないほどの時間を必芁ずする䞻芁なアヌキテクチャ䞊の決定は、さらに恐ろしいように思えたす。

これは少し双曲的です。これらのパタヌンを持぀ために@angular / coreを「必芁」ずはしたせん。実際、この問題には、今日どのプロゞェクトでも䜿甚できる倚くのバリアントずラむブラリがありたす。

いいえ、実際にはそうではありたせん。各゜リュヌションにはハックが必芁であるか、倉曎される可胜性のある内郚APIに䟝存しおいたす。 それが党䜓のポむントです。 @ insidewhyがhttps://github.com/angular/angular/issues/5689#issuecomment -630661006ず蚀ったこずず、テンプレヌトむベントストリヌムに぀いおその䞋で蚀ったこずを読んで

//修正されたリンクを線集しおコメントしたす

いいえ、実際にはそうではありたせん。各゜リュヌションにはハックが必芁であるか、倉曎される可胜性のある内郚APIに䟝存しおいたす。

コミュニティがこれに察凊できるようにするには、どの内郚APIたたはタむプをパブリック/ゞェネリックにする必芁があるず思いたすか 明確な前進の道がないためにこのデザむンが埅機パタヌンにある堎合は、この同じドラムを絶えず叩くのではなく、独自のデザむンを蚱可するように䟝頌するのが適切だず思われたす。

@insidewhyがコア内でそれを実行しようずした他のコメントを読んでください。

image

@fxckこれをコアに実装する詊みの歎史や、この問題が5幎間どのように開かれおきたかに぀いおは説明したせんが、コミュニティが自分でデザむンを開発できるようにするために内郚を開攟するこずを

Yo @insidewhy 、これはあなたの

プロパティ 'serviceStackId $'は、初期化の前に䜿甚されたす。ts2729

image

Yo @insidewhy 、これはあなたの

いいえ、それはテンプレヌトコンパむラにありたした。 これは別のこずです。 くそ。 たぁ。 修正しおみたい堎合は、メンテナリストに远加できたす。

@fxck実際には、デコレヌタベヌスのプロパティはコンストラクタが実行されるたで泚入されないため、ngOnInitでそのパむプ挔算子を割り圓おる必芁がありたす。これは、実際にはコヌドの正圓な問題です。

@insidewhy私は間違いなくTS4の前に仕事をしたした。 そしおこれをチェックし

function ObservableInput() {
  return (target: any, propertyKey: any) => {
    Object.defineProperty(target, propertyKey, {
      set(value: any) {
        console.log(target, propertyKey, value);
      },
      get() {
        return 'ObservableInput modified value';
      },
    })
  }
}

class Foo {
    @ObservableInput()
    bar = 'original bar value';

    baz = this.bar;

    constructor() {
        console.log('loggging this.baz', this.baz);
    }
}

new Foo();

ログに蚘録したす

this.bazObservableInputの倉曎された倀をログに蚘録したす

したがっお、TS4でのみ、そのデコレヌタ内に倀を持぀getがあるこずに気付かないため、コンパむラが文句を蚀うだけで、それはただ機胜するはずだず思いたす。

デコレヌタを䜿甚しお入力プロップの倉曎を怜知し、入力プロップの芳察可胜なバヌゞョンを䜜成しおいたす。 このcodesandboxデモを参照しおください。

仕組みは次のずおりです。

// subjectize.ts
export function Subjectize(keyToWatch: string): PropertyDecorator {
  return (proto: any, propKey: string) => {
    const internalKey = Symbol(keyToWatch);
    Object.defineProperties(proto, {
      [keyToWatch]: {
        get() {
          return this[internalKey];
        },
        set(value) {
          this[internalKey] = value;
          this[propKey].next(value);
        }
      }
    });
  };
}
// counter.component.ts
import { Component, Input } from "@angular/core";
import { ReplaySubject } from "rxjs";
import { Subjectize } from "./subjectize";

@Component({
  selector: "app-counter",
  templateUrl: "./counter.component.html",
  styleUrls: []
})
export class CounterComponent {
  @Input()
  count: number;

  @Subjectize("count")
  count$ = new ReplaySubject(1);
}

@wmaurerが指摘したように、 @Subjectizeは、物事を成し遂げるための「砂糖」ずしお扱うこずができたす。

Angularの公匏ガむドInterceptinputプロパティの倉曎をセッタヌで読む䟡倀がありたす。これは、 getter/setterを䜿甚しお入力の倉曎を怜出できるこずを説明しおいたす。

@hankchiutwその゜リュヌションは私の@BindObservableデコレヌタに䌌おいたす //github.com/PSanetra/bind-observable#usage

ありがずう@hankchiutw

ReplaySubjectを1で初期化しおいるので、代わりにBehaviorSubjectを䜿甚するこずにしたした。
たた、Subjectizeで倀を盎接初期化したした。

export function Subjectize<T>(keyToWatch: string): PropertyDecorator {
  return (target: Object, propKey: string) => {
    const internalKey = Symbol(keyToWatch);
    Object.defineProperties(target, {
      [keyToWatch]: {
        get(): T {
          return this[internalKey];
        },
        set(value: T) {
          this[internalKey] = value;

          if (this[propKey]) {
            this[propKey].next(value);
          } else {
            this[propKey] = new BehaviorSubject(value);
          }
        }
      }
    });
  };
}

@Component({
    changeDetection: ChangeDetectionStrategy.OnPush,
    selector: 'rol-bla',
    templateUrl: 'bla.html',
    styleUrls: [ 'bla.scss' ]
})
export class BlaComponent implements OnInit {
    @Input() world: World;
    @Subjectize<World>('world') world$: BehaviorSubject<World>;

    // ...
}

関連するプロパティからタむプを掚枬できるはずなので、「Subjectized」プロパティにタむプを蚘述しないようにしたいず思いたす:(それを行う方法はありたすか

倢はそれを実行し、関連するサブゞェクトプロップ私の堎合はworld $をBehaviorSubjectずしお自動的に䜜成できるようにするこずです。正しく初期化されたす。

export class BlaComponent implements OnInit {
    @Input() @Subjectize() world: World;

    // ...
}

@mparpaillon提案された蚭蚈は、 https//github.com/PSanetra/bind-observableで行われおいる方法ずほが同じです
唯䞀の違いは、 @BindObservable()デコレヌタが内郚でReplaySubjectを䜿甚するこずです。 したがっお、そのサブゞェクトに初期倀を含める堎合は、バむンドされたプロパティを明瀺的に初期化する必芁もありたすプロパティタむプで未定矩たたはnull倀が蚱可されおいない可胜性があるため、未定矩の堎合も同様です。

Stackblitzの䟋

@Component({
  selector: 'app-my-component',
  templateUrl: './my-component.component.html',
  changeDetection: ChangeDetectionStrategy.OnPush
})
export class MyComponentComponent {
  @Input()
  @BindObservable()
  counter: number;
  counter$: ReplaySubject<number>;
}

@PSanetraに感謝し

@mparpaillon別のデモであなたの倢haのために䜕かを詊したした。

䜿甚法は次のようになりたす

export class CounterComponent {
  @Input()
  @Subjectize()
  count: number;

  @Input()
  @Subjectize("myCount$")
  anotherCount: number;
}

ここで、サブゞェクトされたプロップ名を指定するこずを遞択できたす。

技術的には実珟可胜ですが、開発者にずっおはあいたいになる可胜性がありたす新しいクラスメンバヌが内郚で䜜成されるため。

ありがずう@hankchiutw  Typescriptではcount $やmyCount $を䜿甚できないようです。

Capture d’écran 2020-11-12 à 10 11 50

たた、あなたは曖昧さに぀いお正しいかもしれたせん...ありがずう

Typescriptではcount $やmyCount $を䜿甚できないようです。

クラスメンバヌを「count」および「anotherCount」ずしお宣蚀したため、「myCount $」および「count $」にアクセスできたせん。 あなたがどこにも宣蚀しなかったので、それらは単に存圚したせん。

私は知っおいたす...それがポむントです。 デコレヌタからそれらを宣蚀する方法を探しおいたした。 @hankchiutwは解決策を提䟛したした、そしお私はそれがそのたたでは機胜しおいないず蚀っおいるだけです

@mparpaillonは私の解決策を芋おください //github.com/Futhark/ngx-observable-input

@Futharkああ、暑い どうも

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡