Angularjs 从未调用Angular ui路由器模板提供程序

Angularjs 从未调用Angular ui路由器模板提供程序,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我需要将一个路由参数传递给使用模板进行响应的服务器,因此我正试图为几篇文章/其他堆栈溢出文档使用templateProvider 我没有收到任何javascript错误,但是下面的templateProvider方法从未执行过。当templateUrl属性未被注释掉时,此路由工作正常 $stateProvider .state('org.contacts.add', { url: '/add', views: { 'org@': { // templateUrl: '

我需要将一个路由参数传递给使用模板进行响应的服务器,因此我正试图为几篇文章/其他堆栈溢出文档使用
templateProvider

我没有收到任何javascript错误,但是下面的
templateProvider
方法从未执行过。当
templateUrl
属性未被注释掉时,此路由工作正常

$stateProvider
.state('org.contacts.add', {
  url: '/add',
  views: {
    'org@': {
      // 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;
        });
    }

我猜您需要返回一个
$promise
才能使其生效。请查看在上使用的示例:

$stateProvider.state('contacts'){
templateProvider:函数($timeout,$stateParams){
返回$timeout(函数(){
返回'+$stateParams.contactId+''
}, 100);
}
})

注意以
return$timeout(…
开头的行。您是否尝试返回通过执行
$http.get()创建的
$promise

这帮助我认识到,通过取出
$route
,并使用
$stateparms
,我至少得到了应用的路由和要加载的控制器。现在我看到几乎所有工作都起作用了-http请求已发出,参数是正确的,但HTML响应从未加载到我的视图中。我将用直接返回http承诺的新代码只是将
[object object]
注入到视图中。耶,解决了它。查看angular ui路由器本身的源代码,他们使用的是:
return$http.get(url,{cache:$templateCache})。然后(函数(response){return response.data;});
$stateProvider.state('contacts', {
  templateProvider: function ($timeout, $stateParams) {
    return $timeout(function () {
      return '<h1>' + $stateParams.contactId + '</h1>'
    }, 100);
  }
})