+
+ After:
+
+ JS: scope.foo = function() { alert(1); }
+ HTML:
+
+- **$q:** due to [f078762d](https://github.com/angular/angular.js/commit/f078762d48d0d5d9796dcdf2cb0241198677582c),
+ the `always` method is now exposed as `finally`.
+
+ The reason for this change is to align `$q` with the Q promise library, despite the fact that this makes it a bit more difficult to use with non-ES5 browsers, like IE8.
+
+ `finally` also goes well together with `catch` api that was added to $q recently and is part of the DOM promises standard.
+
+ To migrate the code follow the example below:
+
+ Before:
+
+ ```
+ $http.get('/foo').always(doSomething);
+ ```
+
+ After:
+
+ ```
+ $http.get('/foo').finally(doSomething);
+ ```
+
+ or for IE8 compatible code:
+
+ ```
+ $http.get('/foo')['finally'](doSomething);
+ ```
+
+- **$resource:**
+ - due to [05772e15](https://github.com/angular/angular.js/commit/05772e15fbecfdc63d4977e2e8839d8b95d6a92d),
+ resource instance does not have `$then` function anymore. Use the `$promise.then` instead.
+
+ Before:
+
+ ```
+ Resource.query().$then(callback);
+ ```
+
+ After:
+
+ ```
+ Resource.query().$promise.then(callback);
+ ```
+
+ - due to [05772e15](https://github.com/angular/angular.js/commit/05772e15fbecfdc63d4977e2e8839d8b95d6a92d), instance methods return the promise rather than the instance itself.
+
+ Before:
+
+ ```
+ resource.$save().chaining = true;
+ ```
+
+ After:
+
+ ```
+ resource.$save();
+ resource.chaining = true;
+ ```
+
+ - due to [05772e15](https://github.com/angular/angular.js/commit/05772e15fbecfdc63d4977e2e8839d8b95d6a92d), on success, promise is resolved with the resource instance rather than http response object.
+
+ Use interceptor to access the http response object.
+
+ Before:
+
+ ```
+ Resource.query().$then(function(response) {...});
+ ```
+
+ After:
+
+ ```
+ var Resource = $resource('/url', {}, {
+ get: {
+ method: 'get',
+ interceptor: {
+ response: function(response) {
+ // expose response
+ return response;
+ }
+ }
+ }
+ });
+ ```
+
+- **$route:**
+ - due to [04cebcc1](https://github.com/angular/angular.js/commit/04cebcc133c8b433a3ac5f72ed19f3631778142b),
+ the syntax for named wildcard parameters in routes has changed from *wildcard to :wildcard*
+
+ To migrate the code, follow the example below. Here, `*highlight` becomes
+ `:highlight*`:
+
+ Before:
+
+ ```
+ $routeProvider.when('/Book1/:book/Chapter/:chapter/*highlight/edit',
+ {controller: noop, templateUrl: 'Chapter.html'});
+ ```
+
+ After:
+
+ ```
+ $routeProvider.when('/Book1/:book/Chapter/:chapter/:highlight*/edit',
+ {controller: noop, templateUrl: 'Chapter.html'});
+ ```
+
+ - due to [5599b55b](https://github.com/angular/angular.js/commit/5599b55b04788c2e327d7551a4a699d75516dd21),
+ applications that use $route will now need to load angular-route.js file and define dependency on ngRoute module.
+
+ Before:
+
+ ```
+ ...
+
+ ...
+ var myApp = angular.module('myApp', ['someOtherModule']);
+ ...
+ ```
+
+ After:
+
+ ```
+ ...
+
+
+ ...
+ var myApp = angular.module('myApp', ['ngRoute', 'someOtherModule']);
+ ...
+ ```
+
+- **$location:** due to [80739409](https://github.com/angular/angular.js/commit/807394095b991357225a03d5fed81fea5c9a1abe),
+ `$location.search` now supports multiple keys with the same value provided that the values are stored in an array in `$location.search`.
+
+ Before this change:
+ - `parseKeyValue` only took the last key overwriting all the previous keys;
+ - `toKeyValue` joined the keys together in a comma delimited string.
+
+ This was deemed buggy behavior. If your server relied on this behavior then either the server should be fixed or a simple serialization of the array should be done on the client before passing it to $location.
+
+- **ngBindHtml, sce:** due to [dae69473](https://github.com/angular/angular.js/commit/dae694739b9581bea5dbc53522ec00d87b26ae55),
+
+ ng-html-bind-unsafe has been removed and replaced by ng-html-bind (which has been removed from ngSanitize.) ng-bind-html provides ng-html-bind-unsafe like behavior (innerHTML's the result without sanitization) when bound to the result of $sce.trustAsHtml(string). When bound to a plain string, the string is sanitized via $sanitize before being innerHTML'd. If $sanitize isn't available, it's logs an exception.
+
+- **ngForm:** due to [8ea802a1](https://github.com/angular/angular.js/commit/8ea802a1d23ad8ecacab892a3a451a308d9c39d7),
+
+ If you have form names that will evaluate as an expression:
+
+ ```
+