2016-09-12 6 views
0

Meteor-Angular2チュー​​トリアルに従っていて、うまくいきます。Meteor Angular 2 - autobindがチュートリアルで機能しない

「詳細ビュー」のAngular2 UIによる自動バインドのみが機能しません。たとえば、の詳細ビューに移動した場合、のデータは、のParty1が正しく読み込まれ、Angular2の詳細ビューで表示されます。その後、Party1のデータが(例えばMongoシェルを介して)変更された場合、そのような変更は「詳細ビュー」が表示されるブラウザに(WebSockets経由で)送信されますが、新しいデータはビューに表示されません。

ここにはPartyDetailsComponentクラスのコードがあります。ここで

export class PartyDetailsComponent extends MeteorComponent implements OnInit, CanActivate { 
    partyId: string; 
    party: Party; 

    constructor(private route: ActivatedRoute, private ngZone: NgZone) { 
    super(); 
    } 

    ngOnInit() { 
    this.route.params 
    .map(params => params['partyId']) 
    .subscribe(partyId => { 
     this.partyId = partyId; 
     this.subscribe('party', this.partyId,() => { 
     this.party = Parties.findOne(this.partyId); 
     }, true); 
    }); 
    } 

    saveParty() { 
    Parties.update(this.party._id, { 
     $set: { 
     name: this.party.name, 
     description: this.party.description, 
     location: this.party.location 
     } 
    }); 
    } 

    canActivate() { 
    const party = Parties.findOne(this.partyId); 
    console.log(party); 
    return (party && party.owner == Meteor.userId()); 
    } 

} 

は、私が実際に私の質問への答えはちょうどチュートリアルの多くを読んで見つかった任意のヘルプ

+0

ビューには表示されません。どのようにビューにバインドしますか? –

+0

質問をテンプレートコードで更新しました。表示されていないものは新しい価値です。 Party1の場所がモナコであると仮定しましょう。詳細ビューをロードすると、その場所が正しく表示されます。私がMonzaに位置を変更すると、(WebSockets経由で)ブラウザにアクセスするためにMonzaの新しい値が表示されますが、ビューは自動的にリフレッシュされず、場所はMonacoのままです。ヘルプのThx – Picci

答えて

0

を事前にPartyDetailsComponent

<form *ngIf="party" (submit)="saveParty()"> 
    <label>Name</label> 
    <input type="text" [(ngModel)]="party.name" name="name"> 
    <label>Description</label> 
    <input type="text" [(ngModel)]="party.description" name="description"> 
    <label>Location</label> 
    <input type="text" [(ngModel)]="party.location" name="location"> 
    <button type="submit">Save</button> 
    <a [routerLink]="['/']">Cancel</a> 
</form> 

感謝のテンプレートです。

基本となるMongoの文書が変更されたあと、サブスクリプションコードに適切にMeteo autorun()メソッドを追加するだけで、UIの自動更新を取得できます。あなたが直接(例えば、テンプレート内*ngFor経由)メテオMongoのカーソルを使用する場合

は、ここでは私には全く明らかではないが、何

ngOnInit() { 
    this.route.params 
    .map(params => params['partyId']) 
    .subscribe(partyId => { 
     this.partyId = partyId; 
     this.subscribe('party', this.partyId,() => { 
     this.autorun(() => { 
      this.party = Parties.findOne(this.partyId); 
     }, true); 
     }, true); 
    }); 
    } 

を動作するコードは、なぜ自動実行は必要ありませんされています。

関連する問題