Angular ui-router templateProvider从未调用过

时间:2014-12-07 16:44:08

标签: angularjs angular-ui-router

我需要将一个路由参数传递给服务器,并使用模板进行响应,所以我试图在每篇文章/其他堆栈溢出文档中使用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;
        });
    }

1 个答案:

答案 0 :(得分: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()