angular 1.1.2 angular: ^1.1.2 copied to clipboard
Angular for dart.
v1.1.2 nefarious-crocodile (2015-04-27) #
Highlights #
This release contains small bug fixes related to ShadowDom emulation, transformers, and template cache. Handling of empty string classes has be changed to support the upcoming Dart 1.10 release.
Bug Fixes #
- css: add empty class check to NgElement. (c68c451c)
- ng_class: fix space-handling in css classes. (09797f0a)
- shadow_dom_emulation: fix content reprojection bug. (0db910ae)
- template_cache: Fixes an issue with the generated_template_cache. (1078ca5c)
- transformers: Fix deadlock issue in pub serve. (64df6b80)
v1.1.1 pathological-lemur (2015-03-31) #
Highlights #
This is primarily a bug fix release. Relative URL support
has been improved with a configurable package root. The
expression generator transformer also parses HTML files from
@NgTemplateCache
annotations. A couple of minor bugs were
fixed in the change detector.
Bug Fixes #
- cd: inline _looseIdentical() where it should be (3db2752a)
- change_detector: add null check in _revertToPreviousState (06435792, #1691)
- content_tag: removes elements no longer selected by the content tag from DOM (011d65f0)
- orderBy: ensure the orderBy formatter can handle null values in collections (497c487b)
- relative_url_resolver:
- resource_url_resolver: Makes resolved URLs absolute (f55b6bcc, #1599)
- shadowdom: fixes bug with nested content tags. (f9406a4a)
- transformers:
Features #
- expression_transformer: Parse NgTemplateCache values (6c4d52b6, #1644)
- referenced_uris: allow rewriting of relative URLs (0385717e, #1698)
- relative_url_resolver: Allow configurable package root. (62c51a3c)
- template_cache_transformer: Implement template cache as a transformer (ec7de205, #1646)
- transformers: Allow more complicated package uris (161cf82c)
- zone: adds onCreateTimer overriding interface (43e00e5a)
Performance Improvements #
- AngularTransformerGroup: creates only one Resolvers object (15452ab7)
v1.1.0 isomorphic-panda (2015-01-15) #
Highlights #
This is primarily a bug fix release. Angular.dart's dependencies have been updated to their newest versions. A number of fixes went into the shadow-dom polyfill and forms. Support for Observable objects in change detection has been improved.
Bug Fixes #
- RootScope: set the scope on ScopeAware root context (99a2d372)
- benchmark: Platform.Android -> Platform.isAndroid (ee5ebd75)
- bouncing balls: fix broken demo (3eac327e)
- compiler: change compiler to support attribute mapping for template decorators (d658909a, #1581)
- css_shim: allow "..." for content (9a369e3d)
- ngModel: ensure post-reset validation works properly (6bf7eaab, #1605)
- source_metadata_extractor: Fixed problem with processing Component and Decorator annotations when named import is used. (5205c142)
- url_resolver: changes _baseUri to support non http schemes. (d9291093)
- view: change ViewPort to remove the view that got inserted in the same VM turn (4933a5e8)
Features #
- css_shim: implement polyfill-unscoped-next-selector and polyfill-non-strict (a3ff5cfb)
- dccd: Observable support (3827f424)
- ng-repeat: set the "$parent" variable to the parent context (9da6d2ef)
- ngControl: provide support for clearing errors states (6a6e4caf)
- ngForm: allow forms to be manually validated (7a103901)
- routing: upgraded route_hierachical to 0.6.0 and added support for watchQueryParameters (0fbd007e)
Breaking Changes #
None
v1.0 industrious-pangolin (2014-10-10) #
Highlights #
Angular.Dart v1.0 is our first production-ready release.
This release contains a bit of everything: new features, performance improvements and bug fixes. Angular expressions now evaluate in the context of the surrounding component instead of the current scope. This reduces the boilerplate component authors need to write; no more 'ctrl' prefixes in your templates.
In the same vein, the templateUrl and cssUrls in Component annotations take paths relative to the library defining the Component. The contents of the template likewise use relative paths. You no longer to to specify the full paths to your templates, CSS and resources. Absolute paths are left unchanged.
The new touch module adds support for swipe left and swipe right. Change detection now understands Observable objects (through dart:observe). A number of small changes enable more seamless integration with web-components. Finally, instantiating components is nearly 40% faster.
The new PendingAsync module allows you to be notified when all background asynchronous operations known to Angular (XHR, timers, microtasks, etc.) are complete. The Testability API exposes this in the JavsScript API for use by Protractor E2E tests.
Bug Fixes #
- Component: Remove deprecated applyAuthorStyles & resetStyleInheritance (059b76e7, #1345)
- DirectiveInjector: fix exceptions (87fcd1eb, #1484)
- WTFramework: add back traceDetectWTF call in application start (de824080)
- animate: Remove a reference to dart:mirrors (9a60bcb6)
- application: set injector property when bootstraping the app (bf5d15a7, #1391)
- benchmark: update benchmark to work with new context. (22a50a75)
- bind-*: zone.run scope.apply on bind- change events (77fdc617)
- compiler: Support camelCase property bindings (4cb23914, #1460, #1462)
- components:
- directive-injector: wrong variable name in error thrown. (c533eb55, #1397)
- form example:
- introspection: fix ngProbe with introspected bindings and findElements returning only elements (3ea2b10e)
- metadata_extractor: Do not try to guess the selector (28f9ee48)
- mock: Fix unitialized variable in MockWindow. (862f46c3)
- perf_api: updgrade the pkg minimum version to fix an analyzer error (09d3c830, #1408)
- resource_url_resolver:
- scope: fix a potential memory leak (97410f7d)
- shadow_boundary: change ShadowBoundary not to reorder styles when prepending them (81bab3ea)
- source_metadata_extractor: Extract config from controllers (a981feb2)
- test: remove at trailing "," in JS object literal (e6387cff)
- travis: BUILD_LEADER is not available in build.sh (0720c3c5, #1362, #1393)
- web components: Fix tests in IE10 (43b6f4f0, #1372)
- core: remove analyze warnings (298f0fed)
Features #
- Touch:
- New touch module including ng-swipe-left/ng-swipe-right directives (5d84c6db)
- TestBed: add whitespace handling to compile (5f5ce353, #1262, #1346, #1445)
- compiler:
- support ScopeAware for decorators (943d6193)
- components:
- core, testability: PendingAsync service (1d29b79c)
- dccd: add Support for ObservableList, ObservableMap & ChangeNotifier (85eceef5, #773, #1156)
- directive-injector:
- directives: remove the @Controller directive (5f8e2765, #1401)
- eventHandler: Support snake-case event names instead of camelCase. (fd54c304, #1434, #1478, #1477)
- examples: Add a compelling Shadow DOM example (028b2373, #1377)
- mocks: change MockHttpBackend to define the assertion on flush. (635f9d0c, #900)
- scope:
- tests: run tests on all browsers (8c1f79a4)
- travis: Also check for dart2js sizes that are unexpectedly small (e90fa606, #1427)
- urls: support relative CSS / template URLs in components (50e26453)
- web components: Support custom events for element property binding (94c35225, #1449, #1453)
Performance Improvements #
- component: add a benchmark that measures component creation with and without css files (29f39470, #1421)
- util: call toLowerCase() only where needed (2bcd29e7, #1468)
- view: increase view instantiation speed 40% (00960bb9, #1358)
- view_factory: add a benchmark that measures view_factory in isolation (abbe4efb, #1384)
Breaking Changes #
- mocks: due to 635f9d0c,
Unexpected requests are detected only when
flush
is called.
Before:
backend("GET", /some"); //throws here if `/some` has not been defined
After:
backend("GET", /some"); //no problem, just records the request
backend.flush(); //throws here
Closes #900
- scope: due to a4f08a79,
Scope context is set to the component instance that trigged the creation of the scope (previously it was of a PrototypeMap.)
Repercussions:
- You can not inject a scope in a component or in the root context any more.
As the Scope context is set to the Component instance, the scope could not be injected any more. Components should implements the "ScopeAware" interface and declare a "scope" setter in order to get a reference to the scope.
before:
@Component(...)
class MyComponent {
Watch watch;
Scope scope;
MyComponent(Dependency myDep, Scope scope) {
watch = scope.rootScope.watch("expression", (v, p) => ...);
}
}
after:
@Component(...)
class MyComponent implements ScopeAware {
Watch watch;
MyComponent(Dependency myDep) {
// It is an error to add a Scope argument to the
// ctor and will result in a DI circular dependency error
// The scope is never accessible in the class constructor
}
void set scope(Scope scope) {
// This setter gets called to initialize the scope
watch = scope.watch("expression", (v, p) => ...);
}
}
or:
@Component(...)
class MyComponent implements ScopeAware {
Scope scope;
MyComponent(Dependency myDep) {
// It is an error to add a Scope argument to the
// ctor and will result in a DI circular dependency error
// The scope is never accessible in the class constructor
}
}
- The parent component to an NgForm must have a "$name" field to store the form instance.
closes #919 closes #917
- urls: due to 50e26453,
You must update relative paths to your templates and in ng-include's to be relative to the component's library / ng-include'd file.
NOTE: This feature is defaulted to an "on" state. To get back the old behavior, you may disable this feature for your application. This is only to help you adjust to this change and will go away in a later version. Here's how you can get the old behavior:
module.bind(ResourceResolverConfig, toValue:
new ResourceResolverConfig.useRelativeUrls(false));
Testing:
- e2e transformer tests can now be done on the sample application found in the test_transformers folder
v0.14.0 symbiotic-meerkat (2014-08-22) #
Highlights #
This release is focused on supporting Polymer web components inside Angular components, using the new on-* and bind-* syntax. Take a look at example/web/paper.html for some material design examples.
Also, we have added instrumentation for [Web Tracing Framework] (http://google.github.io/tracing-framework/), so that you can visualize codepaths in your live apps (only browser plug-in required).
At last we did plenty of bug fixing and performance improvements for an even smoother developer experience.
Bug Fixes #
- HttpConfig: Remove the optional argument to the default ctor (a84c0b87, #1285)
- NgRepeat: remove duplicated call to _updateContext() (15570eea)
- benchmark: Remove obsolete DI call (4068e242)
- directive-injector: breaking changes and fixes (600113a8, #1111)
- dom_util: loosen typing of nodes list (f393a96d, #1359)
- example: cleanup imports for ShadowDOM example (721eebab, #1323)
- html_extractor: correct handling of camelCased attributes (7e7c934b, #1301)
- http: always initialize final coalesceDuration (e5cf3784)
- mock: Timer.isActive should be false after running callback (75d40649)
- scope: increase default ScopeDigestTTL to 10 iterations (5ff38bd5)
- web components: Support Polymer quirks (879772fa, #1292)
- web_platform: include selector in viewFactoryCache key (aa5abed2)
- transformer: Don't share resolvers between parallel transformers as this will cause a deadlock (dba6727b, #1276, #1382)
Features #
- Context: Add ability to set the Type for the rootScope context (6a6a7feb)
- DirectiveInjector: add a toInstanceOf parameter to bind() (f8bbd35f)
- OrderBy:
- ScopeAware: introduce ScopeAware abstract class (181f0144, #1360)
- WTF: Add support for WTF (23639c13, #1354)
- directive-injector: introduce getFromParent[byKey] methods on DirectiveInjector (3b7b0d65)
- element binder:
- probe: add directive getter and export ElementProbe type. (3ec5d753)
- routing: add support for dontLeaveOnParamChanges (9f55fbfc, #1252, #1254)
- testability: findBindings and findModels should descend into the ShadowDOM (60a1a21d)
- template-cache add option to use external css rewriter in template_cache_generator (25d85fb3, #1052)
- WTF: extracted scopes to separate file, add documentation (ef3fb7b2, #1361)
Performance Improvements #
- dom: improve dom cloning speed (dec8a972)
- nodecursor: do not grow/shrink the nodes list (1ab510df)
- watch-group: remove expression coalescing (3de00bd4, #1328)
Breaking Changes #
- directive-injector: due to 600113a8,
Regular injectors (aka application injectors) can no longer be used to retrieve DirectiveInjectors. The compiler creates the Directive Injector as part of view creation process.
v0.13.0 tempus-fugitification (2014-07-25) #
Highlights #
This release is focused on performance and significantly speeds up rendering. We optimized our entire rendering pipeline and now component rendering is 2.8 times (those with inlined templates) to 6.3 times faster (those with template files) than the previous 0.12.0 release.
To accomplish these performance improvements, we
- fixed a number of performance bugs
- moved more compilation work out of the ViewFactories, which stamps out DOM nodes, and into the Compiler, which sets up the ViewFactories.
- implemented a custom "directive injector" to optimize Dependency Injection calls from the ViewFactories
- optimized Dependency Injection, eliminating slow APIs
Also, we have given apps more knobs to tune performance
- The Http service now supports coalescing http requests. This means that all the HTTP responses that arrive within a particular interval can all be processed in a single digest.
- The ElementProbe can be disabled for apps that do not use animation
- Along with the existing ScopeStats, Angular now exposes cache statistics through the ngCaches global object. This also allows developers to clear the caches and measure memory usage
- Along with these changes, we have also added support for ProtractorDart.
Bug Fixes #
- DynamicParser: Correctly handle throwing exceptions from method. (82ca6bad, #971, #1064)
- Http:
- NgModel: Read the view value in the flush phase (75c2f170)
- WatchGroup: Handle watching elements of array that were removed. (8c271f78, #1046)
- benchmark:
- cache:
- change_detector: fix NaN move detection in collections (f01e2867, #1136, #1149)
- component factory: Only create a single ShadowDomComponentFactory (707f701c)
- dccd:
- di: Remove deprecated calls to DI bind(Type, inject[]).
- directive: Support multiple directives with same selector. (01488977)
- element binder:
- examples: do not use shadow DOM (0cf209bb)
- expression extractor: Do not use implicit DI (105b41f4)
- introspection:
- getTestability should throw when ElementProbes are unavailable (158e9aa7)
- work around http://dartbug.com/17752 (384039a1)
- karma: remove saucelabs from default browser list. (989992de)
- ng-model: Turn off failing test until Dart 1.6 is stable. (e8825165, #1234)
- ng-view: cleanup should not destroy an already destroyed scope (5cb46a16, #1182)
- ng_repeat: fix ng_repeat not moving views for elements that have not moved (559a685e, #1154, #1155)
- parser: ensure only one instance of dynamic parser (f2c45758)
- pubspec: Add missing upper bound version constraints (cee0d727)
- registry_dynamic: Do not use HashMaps. (04624f21)
- scope:
- transcluding component: Perfer getByKey over get (6f3587d2)
- travis: Work around Travis breakages (be76be4f)
- various: Use the new-style Module.bind(toFactory) syntax (a30c0a57)
- watch_group: fix for NaN !== NaN (d24ff897, #1146)
- web platform: Do not barf on attribute selectors. (f2b83930)
Features #
- animate: Allowed property to turn off all animations (b3f2e6ca)
- benchmark:
- improve layout of data by moving averages to dedicated row (3330d657)
- calculate coefficient of variation (fc09af2c)
- add standard deviation to report (13e87e06)
- calculate relative margin of error and simplify report (4614cc06)
- add confidence and stability info to averages (bd17bbe7)
- add statistical functions to calculate confidence interval (26f7defe)
- add ability to profile memory usage per iteration (afe55814)
- improve sampling UI (e1c17d90)
- change samples input type from range to text (387933d0)
- record gc time for each test run (dfdf67b5)
- add ability to adjust sample quantity (a98663d9)
- add automatic gc before each test (fe1f74d0, #1133)
- cache:
- compiler:
- Backport DirectiveBinder API from #1178 to allow gradual migration. (1f3cca42)
- element binder: Use a child scope instead of Scope.watch(context:o) (6051340b)
- form: Add support for
input[type=color]
(0064ef5c, #611, #1080) - http:
- mock: Add timer queue checks in mock zone (98e61b77, #1157)
- router: added vetoable preLeave event (ddd9e414, #1070)
- scope:
- testability:
Performance Improvements #
- ChangeDetector:
- View: Improve View instantiation speed and memory consumption. (494deda5)
- cd: fewer string concatenations (10% improvement) (a6526803)
- compiler:
- element binder: Do not create tasklists when not needed (a33891ea)
- scope: Cache the Scope.watch AST. (05e2c576, #1173)
- various: Avoid putIfAbsent (57da29d7)
- view cache: Avoid http.get (db72a4fc, #1108)
- view factory: 14% Precompute linking information for nodes (eac36d1d, #1194, #1196)
Breaking Changes #
- Scope: due to 81667aad,
Previously a micro task registered in flush phase would cause a new digest cycle after the current digest cycle. The new behavior will cause an error.
Closes #984
-
View: due to 494deda5,
-
Injector no longer supports visibility
-
The Directive:module instead of returning Module now takes DirectiveModule (which supports visibility)
-
Application Injector and DirectiveInjector now have separate trees. (The root if DirectiveInjector is ApplicationInjector)
-
scope: due to d1e745e0,
Microtasks scheduled in flush will process in current cycle, but they are not allowed to do model changes.
Microtasks scheduled in digest will be executed in digest, counting towards the ScopeDigestTTL.
-
testability: due to 5ef596d1,
NOTE: This only affects you if you are calling this API directly. If you are using ProtractorDart, then you are insulated from this change.
To update your code, rename all references to the notifyWhenNoOutstandingRequests(callback) method on the testability object to whenStable(callback).
v0.12.0 sprightly-argentinosaurus (2014-06-03) #
Highlights #
- A 20% performance improvement from caching interpolated expressions.
- Http service can make cross-site requests (get, post, put, etc.) which use credentials (such as cookies or authorization headers).
- Breaking change: vetoing is no longer allowed on leave (RouteLeaveEvent). This change corrects an issue with routes unable to recover from another route vetoing a leave event.
- Breaking change: Zone.defaultOnScheduleMicrotask is now named Zone.onScheduleMicrotask
- Breaking change: OneWayOneTime bindings will continue to accept value assignments until their stabilized value is non-null.
Bug Fixes #
- NgStyle: make NgStyle export expressions (8470abd3, #993)
- ViewCache: Use an unbounded cache in the ViewCache. (36d93d87)
- VmTurnZone:
- angular_spec: export symbols for the route preLeave event (7c9a7585)
- compiler:
- dccd: fix DirtyCheckingRecord.toString() throws an exception (efcdca3f)
- directives: remove an unused import (6102d8a1)
- element binder:
- 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:
- watch group: Do not use List.map for tiny lists (61f33489)
Breaking Changes #
- VmTurnZone: due to a8699da0,
Zone.defaultOnScheduleMicrotask
is now named Zone.onScheduleMicrotask
v0.11.0 ungulate-funambulism (2014-05-06) #
Highlights #
Breaking Change #
The breaking change first: Http.getString()
is gone.
If you said: Http.getString('data.txt').then((String data) { ... })
before, now say
Http.get('data.txt').then((HttpResponse resp) { var data = resp.data; ... });
New Features #
- Shadow DOM-less components
Shadow DOM is still enabled by default for components. Now, its use can be controlled through the
new useShadowDom
option in the Component annotation.
For example:
@Component(
selector: 'my-comp',
templateUrl: 'my-comp.html',
useShadowDom: false)
class MyComp {}
will disable Shadow DOM for that component and construct the template in the "light" DOM. Either
omitting the useShadowDom
option or explicitly setting it to true
will cause Angular to
construct the template in the component's shadow DOM.
Adding cssUrls to Components with Shadow DOM disabled is not allowed. Since they aren't using Shadow
DOM, there is no style encapsulation and per-component CSS doesn't make sense. The component has
access to the styles in the documentFragment
where it was created. Style encapsulation is a
feature we are thinking about, so this design will likely change in the future.
- bind-* syntax
We have shipped an early "preview" of the upcoming bind-* syntax. In 0.11.0, you may bind an
expression to any mapped attribute, even if that attribute is a @NgAttr
mapping which typically
takes a string.
Performance improvements #
There are two significant performance improvements:
- We now cache CSS as
StyleElement
s instead of string, saving asetInnerHtml
call on each styled component instantiation. In a benchmark where components used unminified Bootstrap styles (124kB), this sped up component creation by 31%. - Changes in the DI package sped up View instantiation by 200%. This change makes AngularDart rendering significantly faster.
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 #
- LRUCache: Support zero-length caches (3e60863e)
- VmTurnZone: VmTurnZone can handle scheduling microtasks. (ecf9b714, #976, #979)
- Zone: add onTurnStart to NgZone. (4bf0c32e, #83)
- annotation: Annotations on superclasses are honored (eee41911, #829)
- compiler:
- debug: Make ngProbe accept a CSS selector (eb057c38, #970)
- formatter: Add arrayify formatter. (d2780f8b, #394, #931)
Performance Improvements #
- compiler: 31%. Cache CSS in Style elements. (cd2594da)
Breaking Changes #
- Http: due to 39a143d,
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:
- 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:
- transformers:
- 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:
- 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:
- compiler: Remove the Block/BlockFactory typedefs (9b790f49)
- component: revert regression of injecting Element/Node into Component (d9fc724e)
- forms:
- 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:
- scope:
- 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:
- core_dom: introduce NgElement (1afa0b61)
- doc:
- element binder:
- 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:
- NgForm:
- 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:
- 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:
- 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:
- dynamic_parser: Handle reserved words correctly (271ecec0, #614)
- eval access: Do not crash on null cached value (bbcbd3e7, #424)
- forms:
- generator:
- 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:
- 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)
- NgForm: provide access to non-uniquely named control instances via form.controls (6099c037, #642)
- NgModelValidator:
- 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:
- ngRepeat: add track by support (07566457, #277, #507)
- routing: new DSL and deferred module loading (3db9ddd3)
- sanitization: make NodeValidator injectable (47ab48ad, #490, #498)
- scope:
- scope2: Basic implementation of Scope v2 (3bde820e)
- scripts: robust authors.sh (ffe43c6c, #586)
- zone: Allow escaping of auto-digest mechanism. (2df2660d, #557)
Performance Improvements #
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:
- 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 #
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:
- 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:
- 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 #
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:
- 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](https://