我有一个从网址
返回模板的指令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);
});
}
}
});
答案 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。