google / angular_node_bind.dart

Utilities to allow Angular templates to use Node.bind()
BSD 3-Clause "New" or "Revised" License
25 stars 13 forks source link

Expressions used in [[ ]] are being tree shaken by dart2js #6

Open adarshaj opened 10 years ago

adarshaj commented 10 years ago

Currently the binding works only in Dartium, and because of tree shaking the expression used only within [[ ]] in html fails to be preserved in generated js after pub build.

sethladd commented 10 years ago

Thanks for the report!

justinfagnani commented 9 years ago

@blois How hard would it be to add [[ ]] expressions to the Angular transformer?

zoechi commented 9 years ago

I read some issue comments/commit messages during the recent weeks that indicate the Angular team is working on direct support of binding to polymer elements but I could have misinterpreted these comments.

blois commented 9 years ago

Adding support for expressions in Angular should be as easy as adding them to: https://github.com/angular/angular.dart/blob/master/lib/tools/html_extractor.dart

Should be able to add tests for it at: https://github.com/angular/angular.dart/blob/master/test/tools/transformer/expression_generator_spec.dart

justinfagnani commented 9 years ago

Is there a way to plug into the the extractor? This same work got rejected from Angular core, so I would expect changes to the extractor to be too. The point of this separate package it to be independent of Angular core.

justinfagnani commented 9 years ago

@zoechi Angular's web component support design will not currently work with many of the custom elements in core-* and paper-* because they don't fire 'change' events when properties change. I think this is a major flaw in Angular's web component support, and angular_node_bind sidesteps all those issues by calling Node.bind() directly.

zoechi commented 9 years ago

@justinfagnani Thanks for the feedback!

justinfagnani commented 9 years ago

Ouch, Angualr's expression extraction support is very limited, making this issue impossible to fix right now. Basically Angular's extractor supports {{ }} expressions, or directives can declare in their annotation which expressions they use, or which attributes contain expressions. Since we don't know ahead of time which expressions are used, or which attributes they're used in, we can't possibly specify that. Not only that but the attribute containing expressions are only support if the entire attribute is an expression.

This is tracked in angular.dart issue 1050: https://github.com/angular/angular.dart/issues/1050