1

我有这个角代码:

    .state('UserTables', {
        url: '/Tables',
        resolve: {
            auth: function resolveAuthentication(SessionService) {
                return SessionService.isUser();
            }
        },
        views: {
            "containerMain": {
                templateUrl: 'Views/Tables',
                controller: TableController
            },
        }
    })

并想将一些请求标头传递给 templateUrl 调用。

有人做过类似的事情吗?

基本上我有一个 REST 服务,它可以根据 1 个标题和一些属性生成我需要的视图。财产没问题,但我不知道如何调用服务并等待结果。

试过:

        views: {
            "containerMain": {
                template: function (SessionService, $http, $q) {
                    console.log('template');
                    var resp = SessionService.getTable($http, $q, 'Generate/Table?objectId=WfObject');
                    var r = '';
                    resp.then(function (result) {
                        r = result;
                        console.log('resp:', r);
                    });
                    console.log('r:',r);
                    return r;
                }
4

2 回答 2

2

我在这里创建了工作 plunker

要加载带有自定义标题的模板,我们可以这样调用(检查 plunker 中的状态“UserTables”)

views: {
    "containerMain": {
        //templateUrl: 'Views/Tables',
        templateProvider: ['$http',
          function ($http) {

            var tplRequest = {
              method: 'GET',
              url: 'Generate/Table?objectId=WfObject',
              headers: {
                'MyHeaderKey': 'MyHeaderValue'
              }, 
            }

            return $http(tplRequest)
            .then(function(response) {
                console.log('loaded with custom headers')
                var tpl = response.data;
                return tpl;
              }
            );
        }],
        controller: 'TableController'
    },
  }

如果我们想要(并且可以)缓存模板,我们可以这样做(检查状态'UserTablesWithCache')

views: {
    "containerMain": {
        //templateUrl: 'Views/Tables',
        templateProvider: ['$http', '$templateCache',
          function ($http, $templateCache) {

            var templateName = 'Generate/Table?objectId=WfObject';
            var tpl = $templateCache.get(templateName)
            if(tpl){
              console.log('returning from cache');
              return tpl;
            }

            var tplRequest = {
              method: 'GET',
              url: templateName,
              headers: {
                'MyHeaderKey': 'MyHeaderValue'
              }, 
            }

            return $http(tplRequest)
            .then(function(response) {
                console.log('loaded, placing into  cache');
                var tpl = response.data;
                $templateCache.put(templateName, tpl) 
                return tpl;
              }
            );
        }],
        controller: 'TableController'
    },
  }

如果我们不需要标头,并且我们可以缓存,那真的很容易,如此处所述:

起草的版本可能是:(没有自定义标题,但有效的加载和缓存)

templateProvider: ['$templateRequest', function(CONFIG, $templateRequest) {

    var templateName = 'Generate/Table?objectId=WfObject';

    return $templateRequest(templateName);
}],
于 2015-04-05T16:58:52.907 回答
0

templateUrl属性也可以将函数作为值。因此,您可以通过那里向 templateUrl 添加动态属性。

templateUrl : function(stateParams) {
      // before returning the URL, add additional properties and send
      // stateParamsargument object refers to $stateParams and you can access any url params from there.
      return  'Views/Tables';
}
于 2015-04-05T09:09:16.247 回答