$watch amb Angular 2
— 2 min de lectura
En el meu post anterior, vaig estar parlant sobre com
implementar esdeveniments d'Angular 1 en Angular 2. Però en el fragment de codi que
utilitzo com a exemple podem trobar una altra cosa que no existeix en Angular 2:
$watch.
Començo definint el problema. Podem tenir una directiva o component d'Angular 1 com aquest:
var module = angular.module("myApp");module.directive('exampleDirective', function () {return {template: '<div>{{internalVar}}</div>',scope: {externalVar: "="},controller: function(scope, element) {scope.$watch('externalVar', function(newVal, oldVal) {if (newVal !== oldVal) {scope.internalVar = newVal;}});}});
Si volem migrar aquest codi a Angular 2 trobem un problema: el nou Angular
no té scope, així que no té $watch. Com podem observar un atribut de directiva?
La solució és la sintaxi set d'ES6.
La sintaxi set vincula una propietat d'objecte a una funció per ser cridada quan hi ha un intent d'establir aquesta propietat.
De MDN
Així que podem vincular l'entrada per a un component a una funció que fa el mateix que la
funció $watch.
import { Component, Input } from '@angular/core';@Component({selector: 'example-component'})export class ExampleComponent {public internalVal = null;constructor() {}@Input('externalVal')set updateInternalVal(externalVal) {this.internalVal = externalVal;}}