When you're trying to bind a variable that's directly on the service, it will fail (see call by sharing). However, if you wrap it with an object, it will work like you expect, see this Fiddle.
So in your case, if you bind an object inside the service to your controller, it should be fine -
Service:
var service = {
boatListObj : {
boatList: null
},
getBoatList: getBoatList,
params: {}
};
Controller:
vm.boatListObj = SearchService.boatListObj;
Promise response:
.then(function (data) {
SearchService.boatListObj.boatList = data;
console.log(SearchService.boatListObj.boatList); // Logs data.
console.log(vm.boatListObj.boatList); // Should log fine now
})
The reason why <div ng-repeat="boat in SearchController.boatList">...</div> is not working is because SearchController.boatList is not on the $scope. It either must be on the $scope, or addressed via ControllerAs syntax when it's placed on the controller.