When last I checked, the state of Polymer.dart and Angular.dart was pretty rough. I had to override multiple dependencies just to get the two to install side-by-side. At the time, that seemed to work, but hardly seemed a long-term solution. Let's see if the situation has improved.
I continue to work with the latest development release version of Dart (the newest Polymer.dart requires it):
$ dart --version Dart VM version: 1.9.0-dev.10.12 (Fri Mar 20 06:26:15 2015) on "linux_x64"In the angular example code from Patterns in Polymer, I start with optimism in my heart. I comment out the old dependency overrides in my
name: angular_example dependencies: angular: any polymer: any angular_node_bind: git: https://github.com/eee-c/angular_node_bind.git # dependency_overrides: # args: any # code_transformers: any # html5lib: any # observe: any dev_dependencies: scheduled_test: any transformers: - angular: html_files: - web/partials/custom.html - polymer: entry_points: - web/index.html - test/index.htmlAnd then I attempt to upgrade to the latest, compatible versions:
$ pub upgrade Resolving dependencies... (38.5s)And it just stops there. Well, it does not stop—the CPU is pegged and the fan on my laptop bolts into high gear.
Some time later, pub gives up the ghost:
Connection closed before full header was receivedSo it seems that I must give Dart Pub a gentle nudge at minimum. I start by explicitly requiring the latest Polymer:
name: angular_example dependencies: angular: any polymer: ">=0.16.0" angular_node_bind: git: https://github.com/eee-c/angular_node_bind.git # ...Since this is in support of a Polymer book, it seems more appropriate to get the latest Polymer library working with a possibly older version of Angular. But even that fails. I still timeout when trying to
pub upgrade. It would appear that a gentle nudge is insufficient. Time for a good firm shove...
I check the generated
pubspec.lockof a Polymer only project and an Angular-old project. Comparing the two, I find that Polymer is using a newer version of the
observepackage and a new version of the
pubspec.lockfor the Polymer-only project, I have:
# ... collection: description: collection source: hosted version: "1.1.0" # ... observe: description: observe source: hosted version: "0.13.0+1" # ...In the
pubspec.lockfor the Angular-only project, I have:
# ... collection: description: collection source: hosted version: "0.9.4" # ... observe: description: observe source: hosted version: "0.12.2+1" # ....In both cases, I opt for Polymer to win (again because I am more interested in evaluating Polymer). So I update my Polymer-Angular example application to include some dependency overrides:
name: angular_example dependencies: angular: any polymer: ">=0.16.0" angular_node_bind: git: https://github.com/eee-c/angular_node_bind.git dependency_overrides: collection: '>=0.9.1 <1.2.0' observe: '>=0.12.0 <0.14.0' # ...That is less than ideal, but I console myself with two rationalizations. First, this halves the number of dependency overrides that I previously had to use. Second, I am using a pre-release version of Polymer. So I do not look too closely and claim progress.
Especially since a
pub upgradenow completes successfully:
$ pub upgrade Resolving dependencies... (11.7s) ... angular 1.1.0 angular_node_bind 0.2.0 from git https://github.com/eee-c/angular_node_bind.git at d7b694 ... ! collection 1.1.0 (overridden) ... > di 3.3.4 (was 3.3.3) ... ! observe 0.13.0+1 (overridden) ... > polymer 0.16.0+6 (was 0.15.5+4) ... Warning: You are using these overridden dependencies: ! collection 1.1.0 ! observe 0.13.0+1 Changed 14 dependencies! ...Best of all, the Angular and Polymer code still double binds the shared attributes. Angular binds the
valueattribute to a local variable of its own, which it also binds in a
When I update the Polymer element, adding sausage to the second half of my
<x-pizza>Polymer element, Angular sees the attribute change and binds the new value into the
Similarly, when I manually edit the JSON in the
<x-pizza>Polymer element is updated:
I close by noting that a recent commit to Angular.dart relaxed the
observepackage sufficiently so that overrides will no longer be needed. At that point, only an override of the
collectiondependency will stand between Angular.dart and Polymer.dart in the same project. Exciting!