Must. Stop. Dart.
I am getting too far ahead of myself while researching Patterns in Polymer. For the most part, I try to keep the Dart and JavaScript investigation in sync. But recently I pushed straight through SVG and on into Angular research with Dart. I really need to work my way back to do both in JavaScript (and to write new chapters on both).
But darn it, Seth Ladd pointed out the angular_node_bind package and… ooh, shiny!
But really, I think that packages answers a need that I had for extracting data from my
<x-pizza> Polymer for use in the containing the Angular application:
I start with the usual, adding
angular_node_bind to the list of my application's dependendencies in pubspec.yaml:name: angular_example
dependencies:
angular: any
polymer: any
angular_node_bind: any
dev_dependencies:
unittest: any
transformers:
- polymer:
entry_points:
- web/index.htmlWhile reading through the angular_node_bind example code, I notice an alternate syntax for initializing a Polymer-powered Angular application. After last night, I already know that I have to manually start the Polymer platform with initPolymer() in my application's main() entry point:main() {
initPolymer();
var store = new AngularModule()
..type(RouteInitializer, implementedBy: StoreRouter);
ngBootstrap(module: store);
}But it seems that it may be more proper to perform that initialization inside a Polymer run():main() {
initPolymer().run((){
var store = new AngularModule()
..type(NodeBindModule)
..type(RouteInitializer, implementedBy: StoreRouter);
ngBootstrap(module: store);
});
}Even better, the new Angular.dart way of doing things seems to be running those type() injects inside a proper constructor:class StoreModule extends Module {
StoreModule() {
type(NodeBindDirective);
type(RouteInitializer, implementedBy: StoreRouter);
}
}
main() {
initPolymer().run((){
ngBootstrap(module: new StoreModule());
});
}However it is done, that should give me what I want: angular binding to my Polymer attributes. So I test this out in my customizing pizza page. The double square brackets should bind an expression for me:<h3>Oooh! Let's make beautiful pizza together</h3> <pre>[[ pizza ]]</pre> <p> <x-pizza pizzaState="[[ pizza ]]"></x-pizza> </p>But, when I load the page up, I am getting a nice old stacktrace:
Class 'DynamicExpression' has no instance getter 'assignable'. NoSuchMethodError : method not found: 'assignable' Receiver: Instance of 'DynamicExpression' Arguments: [] STACKTRACE: #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:45) #1 NodeBindDirective.NodeBindDirective (package:angular_node_bind/angular_node_bind.dart:61:24) #2 _LocalClassMirror._invokeConstructor (dart:mirrors-patch/mirrors_impl.dart:795) #3 _LocalClassMirror.newInstance (dart:mirrors-patch/mirrors_impl.dart:736) #4 DynamicInjector.newInstanceOf (package:di/dynamic_injector.dart:44:35) #5 _TypeProvider.get (package:di/module.dart:142:29) #6 Injector._getInstanceByType.<anonymous closure> (package:di/injector.dart:118:31) #7 _defaultCreationStrategy (package:di/module.dart:106:34) #8 Injector._getInstanceByType (package:di/injector.dart:116:23) #9 Injector._getInstanceByType (package:di/injector.dart:124:7) #10 Injector.get (package:di/injector.dart:173:47) ...And I cannot quite figure this one out.
Update: I was able to get this working with a simple change to angular_node_bind. With that, I can update my Polymer
<x-pizza> and see the changes in my Angular application:
Phew! That's a load off my mind. With that, I think I am safe going back to JavaScript-ify this SVG / Angular application.
Day #1,003
Thanks for the fix Chris. I pushed the version of angular_node_bind with your fix to pub: http://pub.dartlang.org/packages/angular_node_bind
ReplyDelete