我需要将路由参数传递给响应模板的服务器,因此我尝试每隔几篇文章/其他堆栈溢出文档使用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才能正常工作。查看UI-Router wiki上使用的示例:

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


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

08-18 23:11