You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Clojure(Hiccup)中点击按钮时如何获取文本框值并拼接URL?

解决Hiccup中AngularJS ng-model与URL拼接的URI错误问题

你遇到的问题根源在于:后端在解析:href属性时,会把Angular的模板语法{{date}}当作URI的一部分处理,而{{}}属于URI中的非法字符,因此直接触发了URISyntaxException。这里有两种简单可行的解决办法:

方法一:用Angular的ng-href替代原生href

Angular专门提供了ng-href指令来处理动态URL场景——它会等Angular完成模板插值后,再将正确的URL赋值给元素的href属性,这样后端就不会提前解析带有{{}}的字符串了。修改后的Hiccup代码如下:

(text-field {:class "form-control" :ng-model "date"} "date" date)
[:a {:class "btn btn-primary" :ng-href "/dashboard/{{date}}"} "Submit..."]

后端渲染时只会把:ng-href的值当作普通字符串输出,不会触发URI合法性检查;等前端Angular加载完成后,会自动把{{date}}替换成输入框的实际值,生成合法的URL。

方法二:通过ng-click手动处理跳转

如果需要更灵活的控制(比如跳转前验证输入是否合法),可以用ng-click绑定一个控制器函数,手动拼接URL并跳转:

Hiccup代码

(text-field {:class "form-control" :ng-model "date"} "date" date)
[:a {:class "btn btn-primary" :ng-click "navigateToDashboard()"} "Submit..."]

Angular控制器代码

angular.module('yourApp').controller('YourController', function($scope) {
  $scope.navigateToDashboard = function() {
    // 可添加验证逻辑,比如检查date是否为空
    if ($scope.date) {
      window.location.href = "/dashboard/" + $scope.date;
    }
  };
});

这种方式完全绕过了后端对URL的解析,所有逻辑都在前端处理,同样能避免URI异常。

内容的提问来源于stack exchange,提问作者podomunro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:00:37