Sorry, correction above: "widget" should be "widgets". So:
My ng-repeat will never work, because *widgets is renamed using
> ADVANCED_OPTIMIZATIONS.
On Wednesday, December 10, 2014 8:40:47 PM UTC-6, Daniel Lochrie wrote:
>
> I'm working on integrating Closure into my Angular project, and so far so
> good. Building is fine, goog libraries are fine, etc.
>
> However, I am having some issues with property renaming. Specifically:
>
> Controller Code:
>
> /**
> * Updates the current list of widgets.
> * @export
> */
> name.space.widgetController.prototype.getWidgets = function() {
> this.scope_.widgets = name.space.WidgetsController.DEFAULT_WIDGETS_LIST_
> ;
> };
>
>
> Partial Code:
>
> <table class=" table table-striped">
> <thead>
> <tr>
> <th>Name</th>
> <th>Color</th>
> </tr>
> </thead>
> <tbody>
> <tr ng-repeat="widget in widgets">
> <td>{{ widget.name }}</td>
> <td>{{ widget.color}}</td>
> </tr>
> </tbody>
> </table>
>
> My ng-repeat will never work, because widget is renamed using
> ADVANCED_OPTIMIZATIONS. Here is what I am using to compile:
>
> java -jar closure/compiler.jar \
> 'src/app/**.js' '!**_test.js' 'vendor/closure-library/' \
> --angular_pass \
> --externs src/externs/**.js \
> --js_output_file public/javascripts/application.js \
> --generate_exports \
> --only_closure_dependencies \
> --closure_entry_point=name.space.app \
> --compilation_level='ADVANCED_OPTIMIZATIONS' \
> --output_wrapper='(function(){%output%})();//#
> sourceMappingURL=application.js.map' \
> --create_source_map='./public/javascripts/application.js.map'
>
> So I can do two things. One, I can refer to the widgets property as
> $scope['widgets']. This doesn't feel right though... I would also like to
> point out that my constructors have both @ngInject and @export annotations
> - so I don't thing this is the right. I am also telling my compiler (see
> above) about the Angular externs.
>
> The second thing I can do is use the @expose property like this:
>
> /** @expose */
> this.scope_.widgets = name.space.WidgetsController.DEFAULT_WIDGETS_LIST_
> ;
>
> ...but there are a couple of problems with @expose. (1), using expose
> generates "JSC_UNSAFE_NAMESPACE" errors, and (2), the Google Closure Docs
> <https://developers.google.com/closure/compiler/docs/error-ref> say that
> @expose is deprecated, and should be avoided.
>
> I want to use Closure, and the Angular Style guide recommends it, but I am
> confused as to how to approach this issue. How should I name/use/expose
> $scope properties?
>
> You can also see this question at SO
> <http://stackoverflow.com/questions/27389389/cannot-access-scope-properties-after-closure-compiler-property-renaming>
> .
>
--
You received this message because you are subscribed to the Google Groups
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.