UI路由器|在嵌套视图的模板函数中注入服务(或已解析的对象)

时间:2015-08-18 08:47:23

标签: angularjs angular-ui-router

我有一个场景,我只想在满足某些条件时(基于我们从REST调用获得的数据)呈现模板。所以,我做了以下几点:

我的代码(通过将工厂注入模板功能):

.state('dashboard.deal.xyz', {
    url: "/xyz/:dealId",
    resolve: {
      permissions: function(dealUnit, $state) {
        console.log('Inside the resolve of permissions :::', $state.params.dealId);
        return dealUnit.getUnitPermissions('123412341234DealId');
      }
    },
    views: {
      "viewA": {
        template: function(dealUnit) {
        //Here I want to inject either 'permissions' (the resolve object)
        //or the 'dealUnit' factory which gets me the permissions from the server directly.
        return '<h1>return the template after getting the permissions resolve object</h1>';
       }
      },
      "viewB": {
        template: "viewB"
      }
    }
  })

我的'dealUnit'工厂工作正常,当我在状态的'resolve'中使用它时返回一个对象。但是,当我在嵌套视图的模板函数中注入它时,不会注入该工厂。

我做得对吗?如果没有,那么我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

如果我们想做一些&#34;魔术&#34;在返回模板之前......我们应该使用 templateProvider 。检查此Q&amp;答:

Trying to Dynamically set a templateUrl in controller based on constant

因为 template:... 可以是字符串或函数(请查看文档:)

$stateProvider

  

模板

     

html模板作为字符串或函数返回html模板作为字符串,应由uiView指令使用。此属性优先于templateUrl。

     

如果template是一个函数,它将使用以下参数调用:

     

{array。} - 通过应用当前状态

从当前$ location.path()中提取的状态参数
template: function(params) {
    return "<h1>generated template</h1>"; }

使用templateProvider,我们可以获得任何注入的内容,例如角度 $templateRequest 的巨大改进。 Check this answer及其掠夺者

templateProvider: function(CONFIG, $templateRequest) {
    console.log('in templateUrl ' + CONFIG.codeCampType);

    var templateName = 'index5templateB.html';

    if (CONFIG.codeCampType === "svcc") {
         templateName = 'index5templateA.html';
    } 

    return $templateRequest(templateName);
},