将请求 header 传递给 AngularJS 中的 uriTemplate

Pass a request header to uriTemplate in AngularJS

我有这个 Angular 代码:

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

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

有人做过这样的事吗?

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

尝试过:

        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;
                }

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';
}

我创造了working plunker here

要使用自定义 headers 加载模板,我们可以这样调用 (检查 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'
    },
  }

如果我们不需要 headers,并且我们可以缓存,那真的很容易,如此处记录:

草稿版本可能是:(无自定义 headers 但有效加载和缓存)

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

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

    return $templateRequest(templateName);
}],