Subscribing to ActivatedRoute Params in Angular 2 does not update view templates

jaruesink picture jaruesink · Sep 2, 2016 · Viewed 10.1k times · Source

I'm not sure why the change detection wouldn't work here. I've tried a few things, including a setTimeout. I'm using RC5. Basically I want to change the content based off of a parameter in my URL. Should be pretty simple right?

thanks.ts

import { Component } from '@angular/core';
import { Card } from '../../components/card/card';
import { ActivatedRoute } from '@angular/router';

@Component({
  selector: 'sd-thanks',
  styleUrls: ['thanks.css'],
  directives: [Card],
  templateUrl: 'thanks.html'
})
export class Thanks {
  params: any;
  coming: any;
  constructor(public route: ActivatedRoute) {
    this.params = this.route.params.subscribe(
      params => {
        this.coming = params['coming'];
        console.log(this.coming); // this consoles the correct true/false value
      }
    );
  }
}

thanks.html

<card>
  <div *ngIf="coming" class="card-content">
    <span class="card-title">We can't wait to see you!</span>
  </div>
  <div *ngIf="!coming" class="card-content">
    <span class="card-title">We will certainly miss you!</span>
  </div>
</card>

Answer

G&#252;nter Z&#246;chbauer picture Günter Zöchbauer · Sep 2, 2016

Params can only be strings because they come from the URL

If you change it to

this.coming = params['coming'] && params['coming'].toLowerCase() === 'true';

it should work.