Since you are already using a function availableSites() to populate your ng-options data, I would instead recommend sorting your data in the function instead of with ng-options. It will be more performant, and should avoid the issue you are coming across.
Controller:
$scope.availableSites() {
var array = $scope.whateverMeansYouTookToGetYourDataFn();
return array.sort(function(a,b){/* do your sorting or use lodash thats nice too */});
}
WHY?:
The reason you are seeing this side affect is because that availableSites()[0] is grabbing the first item of your unsorted array, meanwhile, then orderBy sorts them into whatever view order, not guaranteeing that availableSites()[0] is the first item after being sorted.
Example:
var unsortedArrayFromController = [
{
"name": "z"
},
{
"name": "b"
},
{
"name": "d"
}
]
unsortedArrayFromController[0]
{name: z}
If ng-options sorts this object array, then the option with name 'z' will still be selected but now will be ordered differently (lets say last) therefore not neccessarily being the first item in the dropdown anymore.
Also:
On a side note. I would recommend storing selected_site = availableSites()[0] in the same controller that you are storing your availableSites() function. The ng-init directive is only to be used in a very specific case where you need to alias nested ng-repeat $index locals.