stateprovider中templateurl中的角度传递参数

时间:2015-03-04 22:11:05

标签: angularjs angular-ui-router

我在角色应用程序中使用 angular-ui-router 中的$stateprovider,如下所示:

.state('order', {
        url: "/order/:id",
        templateUrl: "/myapp/order"
    })

在上面的场景中,我们将id传递给控制器​​,我们可以将其称为ui-sref="order({id: 1234})"

但是现在我想通过不使用控制器直接调用后端,并按如下方式传递上述内容:

.state('order', {
        url: "/order",
        templateUrl: "/myapp/order/:id"
    })

但显然我的语法错了。 我如何实现这种情况?

1 个答案:

答案 0 :(得分:3)

created working example。这是关于Q&答:

Trying to Dynamically set a templateUrl in controller based on constant

我们的示例中包含模板template-A.htmltemplate-B.html templateProvider 的状态def看起来像这样

  $stateProvider
    .state('order', {
      url: '/order/:id',

      templateProvider: function($http, $templateCache, $stateParams) {

        var id = $stateParams.id || 'A';
        var templateName = 'template-' + id + '.html';

        var tpl = $templateCache.get(templateName);

        if (tpl) {
          return tpl;
        }

        return $http
          .get(templateName)
          .then(function(response) {
            tpl = response.data
            $templateCache.put(templateName, tpl);
            return tpl;
          });
      },
      controller: function($state) {}
    });

现在我们可以这样称呼它

  <a href="#/order/A">
  <a href="#/order/B">

检查here

而且,使用最新版本的angularjs,我们甚至可以让它变得非常简单:

<强> $templateRequest

更新了plunker

.state('order', {
  url: '/order/:id',

  templateProvider: function($templateRequest, $stateParams) {

    var id = $stateParams.id || 'A';
    var templateName = 'template-' + id + '.html';
    return $templateRequest(templateName);
  },
  controller: function($state) {}
});