AngularJS templateUrl通过POST方法

时间:2016-11-14 06:59:56

标签: angularjs

我有一个从网址

返回模板的指令
app.directive('mytemplate', function(){
    return {
        templateUrl '/my/template/
    }
});


Request URL:http://127.0.0.1/test/my/template/
Request Method:GET
Status Code:200 OK
Remote Address:127.0.0.1:80

但是默认情况下使用的请求方法是GET。怎么可以改为POST呢?

@Developer

我认为您的解决方案无法正常工作,我无法返回html,因为它是异步的。

app.directive('mytemplate', function(){
    return {
        templateUrl : function(elem, attr){
             $.post('/test/my/template', null, function(response) {
                  //how could i return the response?
             });
        }
    }
});

更新

我找到了另一种不需要覆盖$templateRequest服务的解决方案:

app.directive('myTemplate', function($http, $compile){
    return {
        link: function (scope, element, attrs) {
            $http.post('/my/template/').success(function(res){
                 element.html(res.data);
                 $compile(element.contents())(scope);
            });
        }
    }
});

1 个答案:

答案 0 :(得分:2)

您可以覆盖角度的$templateRequest服务,该服务负责获取模板。

app.config(['$provide', function($provide) {
  $provide.decorator('$templateRequest', ['$http', '$templateCache', '$q', '$delegate', 
  function($http, $templateCache, $q, $delegate) {
    // Return a function that will be
    // called when a template needs to be fetched
    return function(templateUrl) {
      // Check if the template is already in cache
      var tpl = $templateCache.get(templateUrl);
      if (tpl === undefined) {
        if ( false ) {
          // If you only sometimes want to use POST and sometimes you want
          // to use GET instead, you can check here if the request should
          // be normal GET request or not. If it should, just use $delegate
          // service and it will call the original fetcher function.

          return $delegate(templateUrl);
        }

        // Make your POST request here
        return $http.post(templateUrl).then(function(res){ 
          var result = res.data;
          // Cache the result
          $templateCache.put(templateUrl, result);
          return result;
        });
      } else {
        return $q.resolve(tpl);
      }
    };
  }]);
}]);

在您的应用中使用此原始指令代码

app.directive('mytemplate', function(){
  return {
    templateUrl '/my/template/'
  }
});

应该发送POST请求而不是GET。