2014-12-07 3 views
4

Мне нужно передать параметр маршрута на сервер, отвечающий шаблоном, поэтому я пытаюсь использовать templateProvider для нескольких статей/других документов переполнения стека.Угловой шаблон ui-routerProvider никогда не вызывался

У меня нет ошибок javascript, но следующий метод templateProvider никогда не выполняется. Когда свойство templateUrl не закомментировано, этот маршрут работает нормально.

$stateProvider 
.state('org.contacts.add', { 
    url: '/add', 
    views: { 
    '[email protected]': { 
     // templateUrl: '/templates/issues/add', 
     controller: 'ContactsAddController', 
     templateProvider: function($route, $templateCache, $http) { 
      var url = '/templates/' + $route.current.params.org + '/contacts/add'; 
      $http.get(url, {cache: $templateCache}).then(function(html){ 
       return html; 
      }); 
     }] 
    } 
    } 
}) 

После нескольких экспериментов, кажется, $route вызывало проблемы. Принимая это и используя $stateParams, по крайней мере, загорается этот код/​​контроллер.

Однако, пока я вижу стрельбу ajax и правильный html-ответ, он никогда не загружается в представление.

templateProvider: function ($stateParams, $http, $templateCache) { 
     var url = '/templates/contacts/add'; 
     $http.get(url, {cache: $templateCache}).then(function(html){ 
      return html; 
     }); 
    } 

ответ

4

Я предполагаю, что вам необходимо вернуть $promise, чтобы это сработало. Проверьте пример, использованный на UI-Router wiki:

$stateProvider.state('contacts', { 
    templateProvider: function ($timeout, $stateParams) { 
    return $timeout(function() { 
     return '<h1>' + $stateParams.contactId + '</h1>' 
    }, 100); 
    } 
}) 

Обратите внимание на то, что линия начинается с return $timeout(.... Пробовали ли вы вернуть $promise, который создается $http.get()?

+0

Это помогло мне понять, что, выбирая '$ route' и используя' $ stateParams', я, по крайней мере, получаю маршрут для применения и контроллер для загрузки. Теперь я вижу, что почти все работает - запрос http сделан, параметры правы, но ответ HTML никогда не загружается в мое представление. Я обновляю свой вопрос с помощью нового кода. – helion3

+0

Возвращая обещание http непосредственно, просто вводит '[object Object]' в представление. – helion3

+1

Yay, решил. Если посмотреть на источник углового ui-router, это то, что они использовали: 'return $ http.get (url, {cache: $ templateCache}), затем (function (response) {return response.data;});' – helion3