| OLD | NEW |
| (Empty) |
| 1 library todo; | |
| 2 | |
| 3 import 'package:angular/angular.dart'; | |
| 4 | |
| 5 class Item { | |
| 6 String text; | |
| 7 bool done; | |
| 8 | |
| 9 Item([String this.text = '', bool this.done = false]); | |
| 10 | |
| 11 bool get isEmpty => text.isEmpty; | |
| 12 | |
| 13 clone() => new Item(text, done); | |
| 14 | |
| 15 clear() { | |
| 16 text = ''; | |
| 17 done = false; | |
| 18 } | |
| 19 } | |
| 20 | |
| 21 // In 'server mode', this class fetches items from the server. | |
| 22 class ServerController { | |
| 23 Http _http; | |
| 24 | |
| 25 ServerController(Http this._http); | |
| 26 | |
| 27 init(TodoController todo) { | |
| 28 _http(method: 'GET', url: '/todos').then((HttpResponse data) { | |
| 29 data.data.forEach((d) { | |
| 30 todo.items.add(new Item(d["text"], d["done"])); | |
| 31 }); | |
| 32 }); | |
| 33 } | |
| 34 } | |
| 35 | |
| 36 // An implementation of ServerController that does nothing. | |
| 37 // Logic in main.dart determines which implementation we should | |
| 38 // use. | |
| 39 class NoServerController implements ServerController { | |
| 40 init(TodoController todo) { } | |
| 41 } | |
| 42 | |
| 43 | |
| 44 @NgDirective( | |
| 45 selector: '[todo-controller]', | |
| 46 publishAs: 'todo' | |
| 47 ) | |
| 48 class TodoController { | |
| 49 List<Item> items; | |
| 50 Item newItem; | |
| 51 | |
| 52 TodoController(ServerController serverController) { | |
| 53 newItem = new Item(); | |
| 54 items = [ | |
| 55 new Item('Write Angular in Dart', true), | |
| 56 new Item('Write Dart in Angular'), | |
| 57 new Item('Do something useful') | |
| 58 ]; | |
| 59 | |
| 60 serverController.init(this); | |
| 61 } | |
| 62 | |
| 63 // workaround for https://github.com/angular/angular.dart/issues/37 | |
| 64 dynamic operator [](String key) { | |
| 65 if (key == 'newItem') { | |
| 66 return newItem; | |
| 67 } | |
| 68 return null; | |
| 69 } | |
| 70 | |
| 71 add() { | |
| 72 if (newItem.isEmpty) return; | |
| 73 | |
| 74 items.add(newItem.clone()); | |
| 75 newItem.clear(); | |
| 76 } | |
| 77 | |
| 78 markAllDone() { | |
| 79 items.forEach((item) => item.done = true); | |
| 80 } | |
| 81 | |
| 82 archiveDone() { | |
| 83 items.removeWhere((item) => item.done); | |
| 84 } | |
| 85 | |
| 86 String classFor(Item item) { | |
| 87 return item.done ? 'done' : ''; | |
| 88 } | |
| 89 | |
| 90 int remaining() { | |
| 91 return items.where((item) => !item.done).length; | |
| 92 } | |
| 93 } | |
| OLD | NEW |