AngularJS ng-route cómo hacer una solicitud http en resolver

Tengo una plantilla simple con una entrada y un enlace de anclaje que, al presionarla, cargará otra plantilla. Quiero que esta segunda plantilla obtenga la información a través de una solicitud http.

Estoy usando ng-route para redirigir a la plantilla de búsqueda de forma predeterminada y a la plantilla de resultados desde la ruta / search /: title, y estoy tratando de usar la resolución para hacer la solicitud antes de cargar la plantilla de resultados (código en plunker)

El principal problema al que me enfrento es que cuando agrego la resolución, el controlador deja de inicializarse (supongo que se cargará después de que se devuelva la promesa). Esto significa que variables como la URL de búsqueda no se inicializan y los $ routeParams están vacíos cuando los imprimo en la función de búsqueda del controlador.

¿Cómo debería hacer esto?

Tampoco estoy seguro de la sintaxis correcta para la resolución. ¿Es la primera búsqueda una variable de alcance?

resolve: {
    search: searchController.search 
}

Para los perezosos para verificar Plunker, aquí está el código relevante:

Enrutamiento

.config(['$routeProvider',function($routeProvider) {
    $routeProvider.
      when('/search', {
        templateUrl: 'templates/search.html'
      }).
      when('/search/:title', {
        templateUrl: 'templates/result.html',
        controller: 'searchController', 
        resolve: {
            search: searchController.search
        }
      }).
      otherwise({
        redirectTo: '/search'
      });
  }]); 

searchController

var searchController = search.controller('searchController', ["$http", "$scope", "$location", '$rootScope', '$routeParams', function($http, $scope, $location, $rootScope, $routeParams) {
    console.log("Controller constructor");
    this.searchURL = 'http://www.myapifilms.com/imdb?title=%thetitle%&format=JSON';
    $scope.response = '<Response here>';
    this.title = '';
    this.defer = null;
    console.log("PARAMS: " + JSON.stringify($routeParams));
    }]);

    searchController.search = function searchMovie($q, $routeParams) {
        searchController.defer = $q.defer;

        var searchString = $routeParams.title;
        url = searchController.searchURL.replace('%thetitle%', searchString);
        console.log("URL: " + url);
        searchController.searchRequest(url);
    };

    searchController.searchRequest = function(url) {
        $http.get(url).success(function(data) {
            ....
            searchController.defer.resolve(); 
            return searchController.defer.promise;
        })
        .error(function(data, status, headers, config) {
            ...
            searchController.defer.resolve(); 
            return searchController.defer.promise;
        })
    };

Respuestas a la pregunta(1)

Su respuesta a la pregunta