我有很多angular.js组件,它们以典型的方式加载html模板:
templateUrl: 'www.me.com/view.html'
我想以某种方式调整/扩展angular.js,以便在访问之前将某些字符串附加到templateURL。例如,在上面的例子中,将被提取的实际uri将是:
www.me.com/view.html?a=b&c=d
不是
www.me.com/view.html
我知道我可以简单地编辑组件文件以追加它?a = b& c = d在最后,但我无法这样做。但是,我可以在网站上添加一个javascipt文件,以某种方式完成此操作。
任何想法?
答案 0 :(得分:3)
根据您的要求,您可以使用HTTP拦截器。如果您的URL在添加查询参数之前唯一地标识模板,则可以使用。
HTTP拦截器允许您使用其他数据来装饰HTTP请求和响应。
这是一个可能看起来如何的例子:
function templateInterceptor() {
return {
request: function(config) {
if (config.url.indexOf('www.me.com/view.html') === 0) {
config.params = config.params || {};
config.params.a = 'b';
config.params.c = 'd';
}
return config;
}
}
}
angular.module('app', [])
.factory('templateInterceptor', templateInterceptor)
.config(function($httpProvider) {
$httpProvider.interceptors.push('templateInterceptor');
});
行if (config.url.indexOf('www.me.com/view.html') === 0)
取决于确定URL是否引用模板的一些可靠方法。 也许过滤.html文件的请求会更准确。
仅当您的URL在追加查询参数之前唯一标识每个模板的原因是由于AngularJS模板缓存而产生的原因。 AngularJS使用templateUrl
来缓存模板请求。
如果此解决方案不起作用,您可能会被迫分叉AngularJS并在模板缓存代码中进行更改。