Skip to content
This repository was archived by the owner on Feb 22, 2018. It is now read-only.
This repository was archived by the owner on Feb 22, 2018. It is now read-only.

Angular transformer and 'orderBy' filter #1023

@ntherneau

Description

@ntherneau

I'm running into problems when I try to use a field in the 'orderBy' filter that isn't displayed on the page. Works fine in Dartium but not after going through dart2js and the angular transformer (tested both 0.10.0 and 0.11.0). I created a minimal example to demonstrate what I'm running into:

pubspec.yaml

name: Test
dependencies:
  angular: 0.11.0
  browser: any
transformers:
- angular

test.html

<!DOCTYPE html>
<div ng-app id="things">
  <li ng-repeat="thing in ctrl.things | orderBy: 'sortOrder'">{{thing.name}}</li>
</div>

<script type="application/dart" src="test.dart"></script>
<script src="packages/browser/dart.js"></script>

test.dart

import 'package:angular/angular.dart';
import 'package:angular/application_factory.dart';

void main() {
  applicationFactory().addModule(new Module()
      ..bind(ThingController)).run();
}

@Controller(
    selector: '[id=things]',
    publishAs: 'ctrl')
class ThingController {
  List<Thing> things = [];

  ThingController() {
    things..add(new Thing(3, "A Thing"))
          ..add(new Thing(1, "One More Thing"));
  }
}

class Thing {
  int sortOrder;
  String name;

  Thing(this.sortOrder, this.name);
}

When I try to run this as a JS build I get the following error and stack trace:

No getter for 'sortOrder'.

STACKTRACE:
Error
    at dart.wrapException (http://127.0.0.1:4031/test.dart.js:4506:15)
    at StaticClosureMap.lookupGetter$1 (http://127.0.0.1:4031/test.dart.js:11172:17)
    at DynamicParserBackend.newAccessScope$1 (http://127.0.0.1:4031/test.dart.js:9423:21)
    at DynamicParserImpl.parseAccessOrCallScope$0 (http://127.0.0.1:4031/test.dart.js:9777:29)
    at DynamicParserImpl.parsePrimary$0 (http://127.0.0.1:4031/test.dart.js:9753:21)
    at DynamicParserImpl.parseAccessOrCallMember$0 (http://127.0.0.1:4031/test.dart.js:9710:21)
    at DynamicParserImpl.parsePrefix$0 (http://127.0.0.1:4031/test.dart.js:9706:21)
    at DynamicParserImpl.parseMultiplicative$0 (http://127.0.0.1:4031/test.dart.js:9685:21)
    at DynamicParserImpl.parseAdditive$0 (http://127.0.0.1:4031/test.dart.js:9674:21)
    at DynamicParserImpl.parseRelational$0 (http://127.0.0.1:4031/test.dart.js:9659:21) js_primitives.dart:25

It works if I put the 'sortOrder' field somewhere on the page (and rebuild). eg

<li ng-repeat="thing in ctrl.things | orderBy: 'sortOrder'">{{thing.sortOrder}} - {{thing.name}}</li>

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions