javascript - 扩展 angular.js 以自动将后缀附加到所有 templateURL 值

标签 javascript angularjs

我有很多 angular.js 组件,它们以典型的方式加载 html 模板:

templateUrl: 'www.me.com/view.html'

我想以某种方式调整/扩展 angular.js,以便在访问 templateURL 之前始终将某些字符串附加到 templateURL 中。例如,在上面的示例中,将获取的实际 uri 将是:

www.me.com/view.html?a=b&c=d

不是

www.me.com/view.html

我知道我可以简单地编辑组件文件以在末尾附加此 ?a=b&c=d,但我无法这样做。不过,我可以向网站添加一个 javascipt 文件,以某种方式完成此任务。

有什么想法吗?

最佳答案

根据您的要求,您也许可以使用 HTTP 拦截器。如果您的网址在添加查询参数之前唯一标识模板,那么这将起作用。

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 来缓存模板请求。

如果此解决方案不起作用,您可能会被迫 fork AngularJS 并更改模板缓存代码。

关于javascript - 扩展 angular.js 以自动将后缀附加到所有 templateURL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48217406/

相关文章:

javascript - 防止 iframe 安全问题

javascript - 关于 Angular 形式的几个问题

javascript - 如何在 api 的链式执行期间制作 frisby.js 脚本 "pause"

javascript - leaflet JS Cluster Maker 捕获 ids child

javascript - 控制台一次仅打印一个字母,而不是完整的单词

javascript - 页面滚动时的div位置

angularjs - 如何为 Yeoman 应用程序启动 Gulp 服务器?

javascript - 无法解析 VS 2015 Angular 2 导入模块

angularjs - HTTP header 未从 AngularJS 应用程序在 CORS GET 中发送

javascript - meteor :重复使用具有不同数据的模板