{"id":134,"date":"2017-10-16T23:01:57","date_gmt":"2017-10-16T23:01:57","guid":{"rendered":"http:\/\/dart.honobono-life.info\/?p=134"},"modified":"2017-10-16T23:01:57","modified_gmt":"2017-10-16T23:01:57","slug":"angulardart-v4-output-property","status":"publish","type":"post","link":"http:\/\/dart.honobono-life.info\/?p=134","title":{"rendered":"AngularDart v4 @Output property"},"content":{"rendered":"<p>AngularDart v4 Sample Code,Demo<br \/>\n<!--more--><\/p>\n<ul>\n<li>AngularDart : 4.0.0<\/li>\n<li>Dart : 1.24.1<\/li>\n<\/ul>\n<div role=\"tabpanel\">\n<ul class=\"nav nav-tabs\">\n<li class=\"nav-item\"><button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#demo1\">demo<\/button><\/li>\n<li class=\"nav-item\"><button class=\"nav-link\" data-bs-toggle=\"tab\" data-bs-target=\"#html1\">markup<\/button><\/li>\n<li class=\"nav-item\"><button class=\"nav-link\" data-bs-toggle=\"tab\" data-bs-target=\"#script1\">dart<\/button><\/li>\n<\/ul>\n<div class=\"tab-content\">\n<div class=\"tab-pane fade show active\" id=\"demo1\">\n<p><my-app>Loading&#8230;<\/my-app><\/p><\/div>\n<div class=\"tab-pane fade\" id=\"html1\">\n<pre>\r\n(html)\r\n&lt;head>\r\n.....\r\n  &lt;script defer src=\"main.dart\" type=\"application\/dart\">&lt;\/script>\r\n  &lt;script defer src=\"packages\/browser\/dart.js\">&lt;\/script>\r\n&lt;\/head>\r\n&lt;body>\r\n  &lt;my-app>Loading...&lt;\/my-app>\r\n&lt;\/body>\r\n\r\n(pubspec.yaml)\r\n.....\r\nenvironment:\r\n  sdk: '>=1.24.0 <2.0.0'\r\ndependencies:\r\n  angular: ^4.0.0\r\n  angular_forms: ^1.0.0\r\n  angular_router: ^1.0.2\r\n  http: ^0.11.0\r\n  stream_transform: ^0.0.6\r\n\r\ndev_dependencies:\r\n  angular_test: ^1.0.0\r\n  browser: ^0.10.0\r\n  dart_to_js_script_rewriter: ^1.0.1\r\n  mockito: ^2.0.2\r\n  test: ^0.12.21\r\n\r\ntransformers:\r\n- angular:\r\n    entry_points:\r\n    - web\/main.dart\r\n    - test\/**_test.dart\r\n- test\/pub_serve:\r\n    $include: test\/**_test.dart\r\n- dart_to_js_script_rewriter\r\n<\/pre>\n<\/p><\/div>\n<div class=\"tab-pane fade\" id=\"script1\">\n<pre>\r\n(main.dart)\r\nimport 'package:angular\/angular.dart';\r\nimport 'package:angular_forms\/angular_forms.dart';\r\nimport 'memberitem_component.dart';\r\n\r\n@Component(\r\n  selector: 'my-app',\r\n  template: '''\r\n    &lt;strong>Member List&lt;\/strong>\r\n    &lt;ul>\r\n      &lt;li *ngFor=\"let member of members\">\r\n        &lt;member-item [item]=\"member\"\r\n          (done)=\"removeItem(\\$event)\">&lt;\/member-item>\r\n      &lt;\/li>\r\n    &lt;\/ul>\r\n    ''',\r\n  directives: const [CORE_DIRECTIVES,MemberItem]\r\n)\r\nclass AppComponent {\r\n  List&lt;Member> members = [\r\n    new Member(1,'John'),\r\n    new Member(2,'Jessie'),\r\n    new Member(3,'Peter'),\r\n    new Member(4,'Erika'),\r\n    new Member(5,'Tom'),\r\n    new Member(6,'Betty'),\r\n  ];\r\n  void removeItem(id) {\r\n    for(var i=0; i&lt;this.members.length; i++){\r\n      if(this.members[i].id == id){\r\n        this.members.removeAt(i);\r\n      }\r\n    }\r\n  }\r\n\r\n}\r\n\r\nclass Member {\r\n  int id;\r\n  String name;\r\n \r\n  Member(this.id,this.name);\r\n}\r\n\r\nvoid main() {\r\n  bootstrap(AppComponent);\r\n}\r\n\r\n\r\n(memberitem_component.dart)\r\nimport 'dart:async';\r\nimport 'package:angular\/angular.dart';\r\nimport 'package:angular_forms\/angular_forms.dart';\r\n\r\n@Component(\r\n  selector: 'member-item',\r\n  template: '''\r\n    &lt;span class=\"badge\">{{item.id}}&lt;\/span> {{item.name}}\r\n    &lt;button class=\"btn btn-default btn-xs\"\r\n           (click)=\"doneClicked()\">Delete&lt;\/button>\r\n    ''',\r\n  directives: const [CORE_DIRECTIVES]\r\n)\r\nclass MemberItem {\r\n  @Input() Member item;\r\n\r\n  final _onDone = new StreamController.broadcast();\r\n  @Output()\r\n  Stream get done => _onDone.stream;\r\n\r\n  void doneClicked() {\r\n    _onDone.add(this.item.id);\r\n  }\r\n}\r\n\r\nclass Member {\r\n  int id;\r\n  String name;\r\n \r\n  Member(this.id,this.name);\r\n}\r\n<\/pre>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<p><script type=\"text\/javascript\"  src='http:\/\/dart.honobono-life.info\/wp-content\/themes\/ang\/ngdart4\/output.dart.js'><\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>AngularDart v4 Sample Code,Demo<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-134","post","type-post","status-publish","format-standard","hentry","category-angular-dart"],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/dart.honobono-life.info\/index.php?rest_route=\/wp\/v2\/posts\/134","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/dart.honobono-life.info\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/dart.honobono-life.info\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/dart.honobono-life.info\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/dart.honobono-life.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=134"}],"version-history":[{"count":1,"href":"http:\/\/dart.honobono-life.info\/index.php?rest_route=\/wp\/v2\/posts\/134\/revisions"}],"predecessor-version":[{"id":135,"href":"http:\/\/dart.honobono-life.info\/index.php?rest_route=\/wp\/v2\/posts\/134\/revisions\/135"}],"wp:attachment":[{"href":"http:\/\/dart.honobono-life.info\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=134"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/dart.honobono-life.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=134"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/dart.honobono-life.info\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}