Skip to content

Latest commit

 

History

History
1593 lines (1389 loc) · 90.2 KB

CHANGELOG.md

File metadata and controls

1593 lines (1389 loc) · 90.2 KB

v0.12.0 sprightly-argentinosaurus (2014-06-03)

Bug Fixes

  • NgStyle: make NgStyle export expressions (8470abd3, #993)
  • ViewCache: Use an unbounded cache in the ViewCache. (36d93d87)
  • VmTurnZone:
    • Remove a unneeded delegate.run() call. (a0d5d82d)
    • onScheduleMicrotask behaves correctly with orphaned scheduleMicrotasks. (a8699da0)
  • angular_spec: export symbols for the route preLeave event (7c9a7585)
  • compiler:
    • Do not store injectors with TaggingElementBinders (a9dc429c)
    • OneWayOneTime bindings now wait for the model to stablize (0e129496, #1013)
  • dccd: fix DirtyCheckingRecord.toString() throws an exception (efcdca3f)
  • directives: remove an unused import (6102d8a1)
  • element binder:
    • fix memory leak with expando value holding onto node (b7f175bf)
    • Ensure mappings are evaluated before attach() is called. (fef0da0a, #1059)
  • http: use location.href instead of toString (6a48a39d)
  • ng-repeat: handle the ref changing to null and back (46b4c0e0, #1015)
  • transcluding component factory: allow removing components that have no content to transclude (706f9e9b)
  • transcluding_component_factory: fix content detach logic (3141d32e)
  • watch group: Fixed WatchGroup.toString(), added a test. (c9776b4c)

Features

  • Http: Http service can make cross-site requests (get, post, put, etc.) which use credentials (such as cookies or authorization headers). (3ef9d8e4, #945, #1026)
  • date: Use localized patterns for shorthand format (fb1bcf47)
  • dccd: Make toString() code more robust (47ad9d9b)
  • ng-base-css: useNgBaseCss Component annotation field. (b861a9fc)
  • ng-model: Added ng-model-options (f7115aa8, #969, #974)
  • platform: Make angular invoke web_component polyfills for browsers without native web_component implementations. (0c22a3b6)
  • travis: Web platform features for Chrome 34 (7466489d)

Performance Improvements

  • NodeCursor: Do not duplicate child nodes (45436680)
  • _ElementSelector: Remove recursion in addDirective (2fbb60b5)
  • interpolate: 20%. Cache the interpolated expressions. (669d47ce)
  • selector: Remove an useless check (6fea97d4)
  • tagging_view_factory: Move a test out of the loop (e4f7e349)
  • view factory:
    • Compute DI Keys ahead of time (317c23c0, #1085)
    • Remove try-finally from ElementBinder._link (60626104)
    • Remove a try-catch and a timer for the critical path (9f4defef)
  • watch group: Do not use List.map for tiny lists (61f33489)

Breaking Changes

Zone.defaultOnScheduleMicrotask is now named Zone.onScheduleMicrotask

v0.11.0 ungulate-funambulism (2014-05-06)

Bug Fixes

  • Animate: Animation rename types. (70b2e408)
  • Change detection: _LinkList items extend _LinkedListItem (2960d7c2, #932)
  • Dirty Checking: fix watching methods/closures (d71c7fa7, #999)
  • ShadowDomComponentFactory: annotate ShadowDomComponentFactory with @Injectable so that appropriate entry in static factories in generated. (61ce182d, #963)
  • StaticMetadataExtractor: Map members annotations to all annotations (9622318e, #904)
  • angular_spec: Acutally assert (aae2c1f9)
  • change-detection: correctly detect isMethod in StaticFieldGetterFactory (474b002e)
  • codegen: Add missing @Injectable annotation (a4375192)
  • dccd: Fix _MapChangeRecord (36923850)
  • interpolate: changes the interpolate function to escape double quotes (806ed695, #937)
  • ngModel: add input type tel to ngModel directive (a91bbca8)
  • specs: toHaveText merges shadow DOM correctly (d4127643)
  • symbol_inspector: Do not return private symbols (a66b2c13)
  • tests: Use updated annotation type (c93a1bde, #948)
  • transformer:
  • travis: Curl should follow redirects when fetching scripts (40563c89)

Features

Performance Improvements

  • compiler: 31%. Cache CSS in Style elements. (cd2594da)

Breaking Changes

The deprecated Http.getString() method has been removed in favour of Http.get()

v0.10.0 ostemad-teleportation (2014-04-17)

NOTE: Contains significant BREAKING CHANGES!

Bug Fixes

  • DateFilter: cache DateFormat correctly (64cf96f1, #882)
  • NgA: Do not cause a scope digest (de21f4de, #810)
  • NgControl: Remove dead code (b30ebe0f)
  • angular.core: re-export required annotations (6a9ea37c)
  • animation: temporary fix for Animation symbol conflict (82b4f3e1)
  • application_factory: add missing @MirrorsUsed targets (b5e835a0, #911)
  • bootstrap: Rename bootstrapping methods (155582d1)
  • change-detection: When two identical pure functions removed (84781ef3, #787, #788)
  • change-detection: properly watch map['key'] constructs (03f0a4c7, #824)
  • cookies: Make sure Cookies is injectable. (8952cbdd, #856)
  • core: ensure change detection doesn't trigger an infinite loop while not in debug mode (6ac105c9)
  • dirty-checking:
    • handle simultaneous mutations and ref changes (28a79bc2)
    • fix removal of watch record on disconnected group. (d22899aa)
  • doc: add angular.core.annotation lib to docs (ad2e6b0e)
  • docs: reenable broken doc generation (e925a143)
  • events: make ShadowRootEventHandler play nice with static injection (d7683218)
  • example: Adjust MirrorsUsed to make the Todo example work thru dart2js (ee4a448b)
  • export: Add missing NgController to angualr.dart (7475ccc4)
  • filters:
  • forms: change valid_submit and invalid_submit to camelcase (e5baa502, #793)
  • http: fix header map type for http.call() (a6cc826a)
  • jasmine: don't swallow exceptions in afterEach (ae15983d)
  • mirror: added missing mirrors declarations (0ebb49f8)
  • mock: export test_injection from module (70546ca5)
  • mustache: fix regression that fired an initial empty string (c71b8cfc, #734)
  • ng-model: Do not use valueAsNumber to work around dartbug.com/15788 (019209e7, #694)
  • ng-repeat: don't use iterable.length (cf2671ab)
  • ng-view: correct infinite loop in RouteProvider injection (be902f46)
  • ng_mustache: actually assign to _hasObservers (61c953d9)
  • parser: changes parser to throw an error when it encounters an unexpected token (7c26ab0d, #830, #905)
  • profiler: Fix API (f032b376)
  • scope: allow watching an empty string (bd0d4ffd)
  • startup: Avoid creating rarely needed objects (29bda806)
  • tagging-compiler: support top level comments (dc75b016)
  • test: fixes for latest unittest lib (c8527208, #811)
  • transformer:
    • Serializing execution of transformers (8b06e673, #889)
    • crashes in metadata extraction while in pub serve (e35a5e17, #888)
    • Transformer needs html5lib 0.9.2 (b52323e4)
  • transformers:
    • fix accidental breakage due to library rename. Added tests. (88593eec)
    • fix breakage from commit 3fb218180b17bdc9808e575e3a9aaf9928fef28b (5caadbf1)
  • watch_group: remove debugging print statement (93c7b9af)

Features

  • AstParser: Made the AST parser private to the scope (8944f0d9)
  • NgAnnotation: Use module parameter to publish types. (5ec7e831, #779)
  • NgBaseCss: Add NgBaseCss, which adds css files to all components (06fc28a3)
  • Scope:
  • deploy: Move all reflection behind separate import (9bf04eba)
  • directives: Add deprecated warning to applyAuthorStyle, resetStyleInheritance (779ccb80, #838)
  • event_spec: Add aaddTest to run an event test in an iit (a5999863)
  • expect:
    • toHaveText handles shadow DOM. Deprecates JQuery.textWithShadow (0384346d)
    • Move JQuery.text to Expect.toHaveText() and element.text (dfe84d8f)
  • http: Allow overriding of recording URL. (6ecf1d54, #872)
  • karma: Allow Firefox to execute Karma tests (4a6234b3)
  • metadata extractor: Cache the fieldMetadataExtractor for greater performance (63c229c7)
  • ng-model: support input type=date | datetime and all other date/time variants (90e0e076, #747)
  • ngElement: add support for attributes (581861e5)
  • ngRepeat: make use of the new change detection (09871cb2)
  • parser: Add support for named arguments. (18ceb4df, #762)
  • routing: allow routing to view html (cdc89c43, #425, #908)
  • selector: Collect bind- attributes. More tests. Cleanup (4707826b)
  • template_cache_generator: Support custom template path resolution (f5bf7eff, #923)
  • transformers: Add angular transformers to pub for no-mirror code generation (3fb21818)
  • travis:
  • view factory: Each css file has its own <style> tag (4c81989f)

Performance Improvements

  • DirtyCheckingChangeDetectorGroup: Disable calls to _assertRecordsOk(). (d6b9bb70, #813)
  • compiler: 45x speedup. Cache the attribute keys. (556ef5cf)
  • element_binder: use every rather than reduce (27e2845d)

Breaking Changes

  • NgAnnotation: due to 5ec7e831, publishTypes parameter is removed.

    @NgDirective(
      publishTypes: [FooInt]
    )
    class Foo extends FooInt {
    }
    

    becomes

    @NgDirective(
      module: Foo.module,
      visibility: NgDirective.LOCAL_VISIBILITY
    )
    class Foo extends FooInt {
      module() => new Module()
        ..factory(FooInt,
                  (i) => i.get(Foo),
                  visibility: NgDirective.LOCAL_VISIBILITY)
    }
    

    Closes #779

  • bootstrap: due to 155582d1,

    • import:

      • angular/angular_dynamic.dart -> angular/application_factory.dart
      • angular/angular_static.dart -> angular/application_factory_static.dart
    • functions:

      • dynamicApplication() -> applicationFactory()
      • staticApplication() -> staticApplicationFactory()
  • forms: due to e5baa502, All form code that uses control.valid_submit and control.invalid_submit will throw an error. Instead use control.validSubmit and control.invalidSubmit to checkthe submission validitity on a control.

    Closes #793

  • selector_spec: due to c03c538d, This relaxs the assumption that directives will be created in the same order everywhere. For #801

  • nameing: due to f055ab6f Closes #902

    BREAKING CHANGE: These are the renames

    • Concepts:

      - Filter                        -> Formatter
      
    • Importing:

      - angular/directive/ng_a.dart   -> angular/directive/a_href.dart
      - angular/filter/currency.dart  -> angular/formatter/currency.dart
      - angular/filter/date.dart      -> angular/formatter/date.dart
      - angular/filter/filter.dart    -> angular/formatter/filter.dart
      - angular/filter/json.dart      -> angular/formatter/json.dart
      - angular/filter/limit_to.dart  -> angular/formatter/limit_to.dart
      - angular/filter/lowercase.dart -> angular/formatter/lowercase.dart
      - angular/filter/module.dart    -> angular/formatter/module.dart
      - angular/filter/number.dart    -> angular/formatter/number.dart
      - angular/filter/order_by.dart  -> angular/formatter/order_by.dart
      - angular/filter/stringify.dart -> angular/formatter/stringify.dart
      - angular/filter/uppercase.dart -> angular/formatter/uppercase.dart
      
    • Types:

      - NgA                           -> AHref
      - NgAttachAware                 -> AttachAware
      - NgDetachAware                 -> DetachAware
      - NgShadowRootAware             -> ShadowRootAware
      - NgFilter                      -> Formatter
      - NgInjectableService           -> Injectable
      - AbstractNgAnnotation          -> Directive
      - AbstractNgFieldAnnotation     -> DirectiveAnnotation
      - NgComponent                   -> Component
      - NgController                  -> Controller
      - NgDirective                   -> Decorator
      - NgAnimate                     -> Animate
      - NgZone                        -> VmTurnZone
      - NgAnimationModule             -> AnimationModule
      - NgCoreModule                  -> CoreModule
      - NgCoreDomModule               -> CoreDomModule
      - NgAnimationDirective          -> NgAnimation
      - NgAnimationChildrenDirective  -> NgAnimationChildren
      - FilterMap                     -> FormatterMap
      - NgAttrMustacheDirective       -> AttrMustache
      - NgTextMustacheDirective       -> TextMustache
      
    • Constants

      - NgDirective.LOCAL_VISIBILITY           -> Directive.LOCAL_VISIBILITY
      - NgDirective.CHILDREN_VISIBILITY        -> Directive.CHILDREN_VISIBILITY
      - NgDirective.DIRECT_CHILDREN_VISIBILITY -> Directive.DIRECT_CHILDREN_VISIBILITY
      

v0.9.10 llama-magnetism (2014-03-20)

Bug Fixes

  • Filter: Add support for maps (b32beecf)
  • Jasmine: Execute AfterEach methods (71b2855c)
  • NgModel: ensure DOM value changes are only applied during scope.domWrite (419e9189)
  • NgModelValidators: ensure all validators can properly toggle attribute values (98143034)
  • NodeAttrs: lazy init of observer listeners (144eb4c7)
  • animation: correct broken build http://dartbug.com/17634 (9891f333)
  • change_detection:
    • should properly support objects with equality (9b480dad, #735, #670)
    • leaking watch records when removing deeply nested watch_groups (1ba5befb, #700)
    • don't call reactionFn on deleted scope (0aacdc4f)
  • compiler: Remove the Block/BlockFactory typedefs (9b790f49)
  • component: revert regression of injecting Element/Node into Component (d9fc724e)
  • forms:
    • ensure models are validated when validator attributes change (0622f3a9)
    • consider forms as pristine only when all the inner models are non-dirty (4458ce8e)
    • store models instead of controls within the collection of errors (2928ae71)
  • i18n: properly restore locale after test WARNING (f16536ee)
  • jasmine syntax: Drop the wrapFn concept and let _specs.dart handle the sync wrapper (1e971e6b)
  • jquery: Deprecate renderedText() in favour of JQuery.textWithShadow() (364d9ff7)
  • ng-class: remove previously registered watch (8b54f5e6, #725)
  • ng-repeat: should correctly handle detached state (775bbce4, #697)
  • ng-style: watch in RO mode (51ee3298, #721)
  • presubmit:
    • Set new token; correct env variable name (53aeb4aa)
    • use https protocol for push (a2845a50)
    • correct presubmit authentication (8b430d10)
  • scope:
    • allow concurrent fire/add/remove on listeners (e6689e37)
    • should allow removing listener during an event (4662d494, #695)
    • add scope id for easier debugging. (5a368087)
  • tagging compiler:
  • zone: Avoid silently ignoring uncaught exceptions by default. (7bb1944e, #710)

Features

  • NgModel: introduce parsers and formatters (bed9fe15)
  • Scope: Improve ScopeStats reporting (1954e9e2, #744)
  • compiler:
    • Make the TaggingCompiler the default compiler (3ed50b5e)
    • Tagging compiler (59516afb)
    • Initial TagggingCompiler implementation (80163401)
    • ViewFactory now takes a list of ElementBinders (eb559ad0)
    • Add an ElementBinder class and return it from Selector (41bc9a40)
  • core_dom: introduce NgElement (1afa0b61)
  • doc:
    • Animation library documentation updates and fixes. (613030a0, #760)
    • Library description for angular.animate (0576f278)
  • element binder:
    • Make ElementBinder non-recursive and create an external tree (811b4607)
    • ElementBinder.bind (b1a518bd)
  • filters: revert filter being restricted to top level (66cda204)
  • forms: append valid/invalid CSS classes for each validator on all controls (574065f5)
  • jasmine: beforeEachModule syntax and injectifying its (4019046f, #727)
  • jquery: Add shadowRoot() and use it in templateurl_spec (e1745c60)
  • mock zone: isAsyncQueueEmpty (c834837d)
  • mustache: Move unobserved mustache attributes to the flush phase (56647a36, #734)
  • selector: DirectiveSelector is real now: matchElement, matchText (eb4422a9)
  • spec: Ignore ng-binding classes in html() (441daf79)
  • tagging compiler:
  • travis: Seperate Chrome and Dartium into two different jobs. (7c5bdb01)
  • EventHandler Add support for on-* style events (c28e6a02)

v0.9.9 glutinous-waterfall (2014-03-10)

Bug Fixes

  • DateFilter:
  • Directive: remove publishAs from NgDirective to avoid confusion. (7ee587f6, #396)
  • MetadataExtractor: ignore typedefs (37f1c321, #524)
  • NgAttachAware: revert to original behavior and define stronger test (500446d1)
  • NgAttrMustacheDirective: support parsing of multiline attribute values (a37e1576)
  • NgComponent:
    • Handle errors while loading CSS (b5aa130f, #411)
    • Drop cssUrls, leaving cssUrl only (92ed26fb)
    • attach method was called earlier rathe then later. (3c594130)
  • NgForm:
    • always return the first matching control when using map notation on a NgForm instance (95e66d6b)
    • use map notation for controls and dot notation for instance properties (0cc1217b)
  • NgModelValidators: ensure that number input types render invalid when non-numeric characters are present (476a8dbf)
  • NodeCursor: Removes nodeList() in favor of current (aaae1d60, #644)
  • WatchGroup: don't call reaction functions on removed WatchGroups (a7cabe35)
  • angular: export GetterCache from dccd (c1655e8c)
  • binding: call attach when attribute is not specified (1cb8eb9f)
  • block_factory:
    • should not load template or call onShadowRoot when scope is destroyed (2e403504)
    • should not call attach when scope is destroyed (72708e33)
  • bouncing_balls: ball number can not go below 0 (6de4f810)
  • change-detection:
    • correctly process watch registration inside reaction FN. (d6bc9ab8)
    • Fix the handling of NaN & string values for maps (156d6386)
    • Fix for comparing string by value (11f1bd87)
    • reset next/prev on watchGroup.marker (4dfa2676)
    • delay processing watch registration inside reaction fn. (cd4e2e3d)
    • remove memory leak, use iterator (75fbded7)
    • remove memory leak (847af41f)
    • corrected adding group to sibling which had children (8583d08b)
  • change-detector: handle double.NAN for collections (in JS) (07f9b240)
  • compiler:
    • don't wait indefinitly for non-null value on =>! (5451d63d)
    • ensure parent controllers are exposed within the scope of their children (cad8cc4a, #602)
    • support filters in attribute expressions (8f020f99, #571, #580)
  • di: Upgrade dependency of package di preventing problems with dart sdk 1.1 resolves #408 (1f85a8ce, #408, #583)
  • dirty_checking_change_detector: correctly truncate collection change record (c1937b4e, #692)
  • doc: Correct markdown for ElementProbe (5783de44)
    • Use a consistent name for the library (3f541fa4)
  • doc-gen:
    • add docviewer flags for generating the new angulardart docs (99d9f2ae)
    • dartbug.com/16752 (9a1ef31d)
  • dynamic_parser: Handle reserved words correctly (271ecec0, #614)
  • eval access: Do not crash on null cached value (bbcbd3e7, #424)
  • forms:
    • do not reset input fields on valid submission (24e9c3dd)
    • ensure fields, fieldsets & forms are marked as dirty when modified (ad60d55a)
    • treat with no type as type="text" (8f0a8a7f)
  • generator:
    • remove invalid sort on elements (e2a00abe, #554)
    • write files in sorted order for predictable tests (79b7525a)
    • Write URI in sorted order to prevent SHA churn (217839ef)
  • http_spec: implement lastModified getter (e719e75e)
  • introspection:
  • ng-attr: remove camel-cased dom attributes (b5e45117, #567)
  • ng-class: array syntax should not insert nulls (b982e326, #513)
  • ng-event: don't double digest (c38989a4)
  • ng-pluralize: use ${..} to interpolate (a630487d, #572)
  • ng-value: Add ng-value support for checked/radio/option (8fc2c0f4)
  • ngControl: unregister control from parent on detach (4c9b8044, #684)
  • ngModel:
    • ensure checkboxes and radio buttons are flagged as dirty when changed (5766a6a1, #569, #585)
    • process input type=number according to convention, using valueAsNumber (cf0160b8, #574, #577)
    • ensure validation occurs when the model value changes upon digest (f34e0b31)
    • evaluate user input using onInput instead of onKeyDown (64442974)
  • ngShow: Add/remove ng-hide class instead of ng-show class (0b88d2e8, #521)
  • package.json: add repo, licenses and switch to devDependencies (d099db59, #544, #545)
  • parser:
    • disallow filters in a chain and inside expressions (5bcea649)
    • Correctly distinguish NoSuchMethodError (bde52abe)
  • parser, scope: Allow nulls in binary operations. (59811752, #646)
  • parser_generator: use parser getter/setter generator instead (42c8d8c8)
  • readme: Read the Travis badge (6fe5692b)
  • routing: correctly scope routing to ng-app (3ab250a7)
  • scope:
    • fix null comparisons (fb0fe0e3, #646)
    • incorrect stage message (2169a950)
    • correctly setup NgZone onError handler with ExceptionHandler (e8bc580c)
    • return null to supress an analyzer error (fad457e9, #594)
    • correctly handle canceled listeners bookkeeping (259ac5b1)
    • should not trigger assertions on fork (484f03dc)
    • skip scopes without event on broadcast (ae22a6f3)
    • createChild now requires context (6722e1a4)
    • improve error msg on unstable model (c9bf23a0)
    • allow sending emit/broadcast when no on() (d9dfe0f8)
    • Use Iterable instead of List (951fa178, #565)
    • use correct filters when digesting scope tree (95f6503f)
  • select: Corrected NPE if select multiple nested in ng-if (6228692b, #428)
  • selector: Allow two directives with the same selector (467b935e, #471, #481)
  • template_cache_generator: support traversal of partial files (f918d4dd, #662)
  • watch_group: prevent removed watches from firing (a558a26f)

Features

  • Animation: Animation for AngularDart. (5a36e773, #635)
    • introduce ng-animate and ng-animate-children. (88d2af6f, #661)
  • NgForm: provide access to non-uniquely named control instances via form.controls (6099c037, #642)
  • NgModelValidator:
    • perform number validations on range input elements (710cd5b0, #682)
    • provide support for min and max validations on number input fields (7dc55fbf)
  • Scope: Brand new scope implementation which takes advantage of the new change detection (390aea5e)
  • block:
  • blockhole: Change blockhole to have the insert / remove / move methods. (c1e70ce8, #689)
  • change-detection: Initial implementation of new change-detection algorithm. (d0b2dd95)
  • doc: Documentation generation for NgAnimateModule. (a029ac5e)
  • doc-gen: Use new docviewer for generating docs (67fcafff)
  • forms:
    • use the ng-form attribute as the name of the inner form (8b989b6d, #681)
    • introduce the control.hasError helper method (7b75af44)
    • expose getters for submitted, valid_submit and invalid_submit (9daaa0fc, #601)
    • provide support for touch and untouched control flags (634c62b1, #591)
    • generate ng-submit-valid / ng-submit-invalid CSS classes upon form submission (4bf9447c)
    • provide support for reseting forms, fieldsets and models (c75202d5)
    • add a test for input type="search" (87a60d1f)
  • ngModel:
    • Treat the values of number and range inputs as numbers (e703bd1b, #527)
    • support the input[type="search"] field (ff736d92, #466)
  • ngRepeat: add track by support (07566457, #277, #507)
  • routing: new DSL and deferred module loading (3db9ddd3)
  • sanitization: make NodeValidator injectable (47ab48ad, #490, #498)
  • scope:
    • add scope digest stat collection (c066923d, #609)
    • add internal streams consistency checks (65213c30)
    • Experimental: Watch once, watch not null expressions (84762b10)
    • Allow expressions on non-scope context (e4dfb469)
  • scope2: Basic implementation of Scope v2 (3bde820e)
  • scripts: robust authors.sh (ffe43c6c, #586)
  • zone: Allow escaping of auto-digest mechanism. (2df2660d, #557)

Performance Improvements

  • change-detection: optimize DirtyCheckingChangeDetector.collectChanges() (4453e3e8, #693)
  • scope:

BREAKING CHANGES

0.9.9 contains a major overhaul to the change-detection algorithm which is used behind the scenes during scope digests. As a result, much of the scope API has changed to facilitate this new feature.

The biggest change is how scope properties are assigned on the scope. With earlier versions of AngularDart, the scope object itself was treated like a map and any property accessed using square brackets would either set or get the associated value. With 0.9.9 this will not produce the same effect. Instead all scope property getter and setter operations are to be facilitated within the scope.context member. So in other words, all the scope property reading and writing that was done in earlier versions is now done the same way, but on the scope.context member.

// < 0.9.9
scope['prop'] = 'value'; //set
scope['prop']; //get

// >= 0.9.9
scope.context['prop'] = 'value'; //set
scope.context['prop']; //get

Breaking Changes to the Scope API

1. scope.$watch() is now scope.watch()

//old code
scope.$watch('a.b.c', () {});

//new code (no more $ prefixing)
scope.watch('a.b.c', (value, previous) {});

2. scope context changes

//old code
scope.$watch(() => o.foo; () {});

//new code (notice the context property)
scope.watch('foo', (value, _) {}, context: o);

3. watch de-registration

//old code
var stopWatch = scope.$watch(...);
stopWatch();

//new code
Watch watch = scope.watch(...);
watch.remove();

4. Replace scope-level digests

//old code
scope.$digest();

//new code
scope.rootScope.apply();

//Digest is now split between digest/flush so we need apply to call them both.

5. Changes to scope event listeners

//old code
scope.$on('foo', (e, data) {});

//new code
scope.on('foo').listen((e) {var data = e.data;});


//old code
scope.$on('foo', (e, a, b, c) {});

//new code
scope.on('foo').listen((e) {MyEvent data = e.data;});


//old code
scope.$emit('foo', [a]);

//new code
scope.emit('foo', a);


//old code
scope.$emit('foo', [a, b ,c]);

//new code
scope.emit('foo', new MyEvent(a, b, c));

6. Creating new scopes

//old code
scope.$new();

//new code
scope.createChild(new PrototypeMap(scope.context)));

//We have plans to allow any object to be the context.
//The PrototypeMap is a way to maintain consistent behavior.

7. EvalAsync

//old code
scope.$evalAsync(() => null);

//new code
scope.runAsync(() => null);


//old code
scope.$evalAsync(
    () => null,
    outsideDigest: true);

//new code
scope.domRead(() => null);

8. scope.$$verifyDigestWillRun() has been removed

There is currently no replacement. We feel that we have the zone under control and there is no need for this method any more.

9. scope.$disabled has been removed

There is currently no replacement.

10. Watching collections

//old code
scope.$watchSet(['ctrl.foo', 'ctrl.bar'], (values) {...});

//new code
scope.watch('[ctrl.foo, ctrl.bar]', (vars, _) {
  var ctrlFoo = vars[0];
  var ctrlBar = vars[1];
});

v0.9.8 cozy-porcupine (2014-02-19)

Bug Fixes

  • DateFilter: fix a wrong type (cec3edad, #579)
  • compiler: support filters in attribute expressions (8f020f99, #571, #580)
  • di: Upgrade dependency of package di preventing problems with dart sdk 1.1 resolves #408 (1f85a8ce, #408, #583)
  • doc-gen: dartbug.com/16752 (9a1ef31d)
  • generator: remove invalid sort on elements (e2a00abe, #554)
  • ng-attr: remove camel-cased dom attributes (b5e45117, #567)
  • ng-pluralize: use ${..} to interpolate (a630487d, #572)
  • ng-value: Add ng-value support for checked/radio/option (8fc2c0f4)
  • ngModel:
    • ensure checkboxes and radio buttons are flagged as dirty when changed (5766a6a1, #569, #585)
    • process input type=number according to convention, using valueAsNumber (cf0160b8, #574, #577)
    • ensure validation occurs when the model value changes upon digest (f34e0b31)
  • ngShow: Add/remove ng-hide class instead of ng-show class (0b88d2e8, #521)
  • package.json: add repo, licenses and switch to devDependencies (d099db59, #544, #545)
  • scope: Use Iterable instead of List (951fa178, #565)

Features

  • forms:
    • generate ng-submit-valid / ng-submit-invalid CSS classes upon form submission (4bf9447c)
    • provide support for reseting forms, fieldsets and models (c75202d5)
  • ngModel: Treat the values of number and range inputs as numbers (e703bd1b, #527)

Breaking Changes

  • ng-attr
    • Due to (b5e45117, mappings in annotations must use snake-case-names instead of camelCaseNames.  To migrate your code, follow the example below:

      Before:

      @NgComponent(
          // …
          map: const {
            'domAttributeName': '=>fieldSetter'
          }
      )
      class MyComponent { …
      

      After:

      @NgComponent(
          // …
          map: const {
            'dom-attribute-name': '=>fieldSetter'
          }
      )
      class MyComponent { …
      

v0.9.7 pachyderm-moisturization (2014-02-10)

Bug Fixes

  • MetadataExtractor: ignore typedefs (37f1c321, #524)
  • NgAttrMustacheDirective: support parsing of multiline attribute values (a37e1576)
  • NgComponent:
  • eval access: Do not crash on null cached value (bbcbd3e7, #424)
  • forms: ensure fields, fieldsets & forms are marked as dirty when modified (ad60d55a)
  • generator:
    • write files in sorted order for predictable tests (79b7525a)
    • Write URI in sorted order to prevent SHA churn (217839ef)
  • input: treat <input> with no type as type="text" (8f0a8a7f)
  • ng-class: array syntax should not insert nulls (b982e326, #513)
  • ngModel: evaluate user input using onInput instead of onKeyDown (64442974)
  • parser:
    • disallow filters in a chain and inside expressions (5bcea649)
    • Correctly distinguish NoSuchMethodError (bde52abe)
  • scope: use correct filters when digesting scope tree (95f6503f)
  • select: Corrected NPE if select multiple nested in ng-if (6228692b, #428)
  • selector: Allow two directives with the same selector (467b935e, #471, #481)

Features

v0.9.6 fluffy-freezray (2014-02-03)

WARNING

We reserve the right to change the APIs in v0.9.x versions.

Bug Fixes

  • Directive: remove publishAs from NgDirective to avoid confusion." (7ee587f6, #396)
  • NgAttachAware: revert to original behavior and define stronger test (500446d1)
  • NgComponent: attach method was called earlier rathe then later. (3c594130)
  • doc: Using a consistent name for the library (3f541fa4)
  • routing: correctly scope routing to ng-app (3ab250a7)

Features

  • change-detection: Initial implementation of new change-detection algorithm. (d0b2dd95)
  • ngModel: support the input[type="search"] field (ff736d92, #466)

v0.9.5 badger-magic (2014-01-27)

WARNING

We reserve the right to change the APIs in v0.9.x versions.

Bug Fixes

  • Directive: remove publishAs from NgDirective to avoid confusion. (c48433e0)
  • directive: call attach method ofter all bindings execute (11b38bae)
  • directives: cssUrl in NgComponent (952496b0)
  • docs: correct typo (4494ce70)
  • expression_extractor: implemented support for wildcard attr selector (1e403447, #447)
  • generator: Avoid compile-time filter map querying when generating static parser. (522ba49c)
  • ng-model: Allow ng-required to work on non-strings. (a7c3a8d8)
  • parser: Workaround dart2js bugs in latest version of Dart SDK 1.2. (dddc3c83)
  • scope: honor $skipAutoDigest on non-root scopes (7265ef7a)
  • todo: Fixing some dart2js compilation issues for todo demo (b8e97d9e, #453)

Features

  • core: provide support to define the same selector on multiple directives (dd356539)
  • directive: Add ng-attr-* interpolation support (aeb5538e)
  • directives: Add support for contenteditable with ng-model (715d3d1e)
  • expression_extractor: Add source path to source crawler (6597f73f)
  • forms:
    • provide support for parent form communication (6778b62e)
    • add support for validation handling for multiple error types (d3ed15cb)
    • provide support for controls and state flags (d1d86380)
  • helloworld: MirrorsUsed (73b0dca8)
  • js size: Add a default @MirrorsUsed to Angular. (1fd1bd07, #409)
  • mock: support for JSON in HttpBackend (9d09a162, #236)
  • ngModel: provide support for custom validation handlers (e01d5fd7)
  • parser: Allow operator access to non-map, non-list objects (51e167b8, #416)

v0.9.4 supersonic-turtle (2014-1-13)

Bug Fixes

  • di: removed type parameters to accommodate di restriction (7646df6d)
  • doc: NgShadowRoot => NgShadowRootAware (303c12b8)
  • docs: typo (06ab9e75)
  • expression extractor: Fix and test (ff737732)
  • expression_extractor: fixed package roots (6b2c9921)
  • http_backend: don't swallow http request errors. (8cc26533)
  • input: corrected NPE when input goes away (e97b9d07, #392)
  • introspection: Search our shadowRoot as well (6549c982)
  • ng_model: Disable a test that did not pass in content_shell (a3da7310)
  • parser: pass analyzer v1.1.0 (e61e0375)
  • scope:
    • fix $properties not visible using [] (4345857b)
    • Also check for UnimplementedError when reflecting on source (1d870ba4)
  • sdk: Add support for Dart SDK 1.1 (9d6914ec)
  • selector: the required attribute should properly work with ng-required (472d764e)

Features

  • NodeAttrs:
    • implement the keys getter and containsKey() (1a7d4a42)
    • Implement forEach to iterate over attributes (5c415135)
  • compiler:
    • A better error message for invalid selectors (99eab544)
    • Throw a useful error message on a missing NgComponenet selector (42692a14)
  • events: add missing ng-events (97bd4bc2, #386)
  • ng-pluralize: Implement the ng-pluralize directive (51d951e3)
  • scripts: automatic way of generating changelog.MD (11af25c8)
  • template_cache_generator: simple template cache generator (32e073b7)
  • travis: add travis support (fa3727f8)

Performance Improvements

  • NodeAttrs: Remove one unnecessary call to snakecase (ad2a7d54)
  • bracket: Optimize calling methods on objects. (12f5f672)
  • parser:
  • scope:
    • Compute perf counters as part of the fast dirty check if possible. (1932110c)
    • Make the digest loop easier to optimize by splitting it into smaller and simpler methods. (46123637)

v0.9.3 reverse-telekinesis (2013-12-16)

WARNING

We reserve the right to change the APIs in v.0.9.x versions.

Bug Fixes

  • expression_extractor:
    • support for inline templates (898ec6d8, #186)
    • do not fail when source file doesn't exist (887e1bff)
  • ng-repeat: ng-repeat support for Iterable (080bb0a6, #292)
  • ng_model: do not save/restore selection unnecessarily (3c805483, #264)
  • scope:
    • log firing expressions in the watchLog (cfa97d68, #258)
    • remove GC pressure created by watchCollection getter (a435a8f2)
  • todo demo: Return the correct CSS class for TODO items in the demo. (217a57ec)

Features

  • NgComponent: Support multiple css files (6c6151cf)
  • cookies: Basic Cookies service/wrapper over BrowserCookies (6efde83e)
  • mocks: provide support for child scope parameters in compile (2d2c5219)
  • ng-model: implemented support for input[type=password] (058c8ee4)

Performance Improvements

  • bracket: Optimize calling methods on objects. (525eeadb)
  • digest: Use linked list for watchers (7b6b0e5d)

v0.9.2 limited-omnipotence (2013-12-02)

WARNING

We reserve the right to change the APIs in v.0.9.x versions.

Bug Fixes

  • expression_extractor: support extracting expresions from attr mapping annotations (76fbac8c, #291)
  • filters: Fix filters in the code-gen parser (8b2c3b62)
  • ng-class: exportExpressionAttrs for ng-class, ng-class-odd, ng-class-even (cecf3b6d)
  • parser:
    • Add ternary support to the static parser (e37bd8f7)
    • Add caching to the dynamic parser. (9cdd77a5)
  • static parser: Allow newlines in expressions. (d21817ff, #297)
  • syntax: warnings in directive code (1f3e3f72)

Features

  • parse:
  • di: introduced @NgInjectableService to make di codegen easier (54328d78)
  • interpolate: use $watchSet to remove memory pressure (283ea257)
  • ngForm: introduce basic support for the form directive (26ca46d8)
  • parser_generator: allow specifying output file (0615456e)
  • probe:
    • add ngQuery which can cross shadow root boundaries (20897917)
    • Access injector, scope, directives from REPL (70c3e8d3, #305)
  • repeater:
  • scope:

v0.9.1 elemental-mimicry (2013-11-18)

WARNING

We reserve the right to change the APIs in v.0.9.x versions.

Bug Fixes

  • don't create watchers for <=> => and =>! attributes if attribute is not specified on the element (6ea6af8b, #265)
  • ng-view does not clear template when route is deactivated (6acb2c32, #245)

Features

v0.9.0 static-animation (2013-11-04)

Initial beta release of AngularDart available for public testing.

WARNING

We reserve the right to change the APIs in v.0.9.x versions.

Features

  • Notable Directives: input, ng-bind, ng-class, ng-events, ng-if, ng-include, ng-model, ng-show\hide, ng-switch, ng-template.

  • Notable Services: Compiler, Cookies, Http, ExceptionHandler, Scope.

  • Notable Filters: currency, date, filter, json, limitTo, number, orderBy

Missing Features

  • Forms / Validation: has not made it into AngularDart yet.

Semantic Version Conventions

http://semver.org/

  • Stable: All even numbered minor versions are considered API stable: i.e.: v1.0.x, v1.2.x, and so on.
  • Development: All odd numbered minor versions are considered API unstable: i.e.: v0.9.x, v1.1.x, and so on.