dart - AngularDart: How to force page re-rendering similar to $digest in AngularJS? -
i have page simple component:
<!doctype html> <html ng-app> <head> <title>test</title> </head> <body index-page> <div> <h1>status</h1> <h2>{{ 1 | enum }}</h2> </div> <script type="text/javascript" src="packages/web_components/platform.js"></script> <script type="text/javascript" src="packages/web_components/dart_support.js"></script> <script type="application/dart" src="index.dart"></script> <script type="text/javascript" src="packages/browser/dart.js"></script> </body> </html> the filter 'enum' use loads data using xhr. therefore, @ page load time data available (say, takes second). so, while data not there filter returns null. how can trigger controller re-evaluate template when data received , filter able return meaningful values?
in example below use timer simulate xhr:
import 'dart:html'; import 'dart:convert'; import 'dart:async'; import 'package:angular/application_factory.dart'; import 'package:angular/angular.dart'; @controller(selector: '[index-page]', publishas: 'ctrl') class indexpagecontroller { } const delay = true; @formatter(name: 'enum') class enumnameformatter { map names = new map(); enumnameformatter() { if (delay) { new timer(new duration(milliseconds:2000), fillnames); } else { fillnames(); } } void fillnames() { names[1] = "one"; names[2] = "two"; names[3] = "three"; } string call(enumvalue) { var enumname = names[enumvalue]; if (enumname != null) { return enumname; } } } class myappmodule extends module { myappmodule() { // needed https://github.com/angular/angular.dart/issues/1272 // fixed in 14.0 binding.printinjectwarning = false; // main controller bind(indexpagecontroller); // formatter bind(enumnameformatter); } } void main() { applicationfactory().addmodule(new myappmodule()).run(); } in example below, if set delay = true - "one" not displayed on page. if set delay=false - works (as should). how can force page refresh/re-rendering when xhr (timer) completed?
in angulardart, no longer need use $apply or $digest re-render page. use dart zones dirty-check model automatically after operation.
what seeing, different bug/feature -- @formatters idempotent. is, assume if have formatted value once, formatting again produce same result.
since expression being formatted: 1 has not changed, don't re-run formatter because assumed give same value.
an easy work-around use function instead of formatter.
Comments
Post a Comment