This is limitation of JavaScript not Angular.
From ECMAScript Third Edition:
4.3.3 An object is a member of the type Object. It is an unordered collection of properties each of which contains a primitive
value, object, or function. A function stored in a property of an
object is called a method.
From ECMAScript Language Specification
The […] order of enumerating the properties […]
is not specified.
Angular sorts object keys explicitly in order to provide at least some sort of persistent behavior.
Workaround is to iterate over extracted keys:
<div ng-repeat="key in keys(Dates)">
{{key}} ==> {{Dates[key]}}
</div>
$scope.keys = function(obj){
return obj? Object.keys(obj) : [];
}
$scope.Dates = {
"Today":"30",
"This Week":"42",
"This Month": "Oct",
"This Quarter" : "Bad",
"This Year" : 2013
};