2

angular.js 可以和 JSTL 表达式语言通信吗?我想使用数组创建 ng-options。像这样的东西:

<select ng-model="detail" ng-init="Categories = '${Categories}'" ng-options="'${Category.code}' for Category in Categories">
 

4

2 回答 2

3

不可能有 angular-JSTL 通信这样的东西,但您仍然可以实现您正在寻找的东西。JSP 将在服务器端进行评估,生成最终的静态 HTML 以发送到客户端,Angular 应用程序在客户端发挥其魔力。因此,JSTL 是在服务器端评估的,Angular 应用程序不可能与它“通信”。

在您的情况下,假设您已像这样分配这些变量:

Categories = '[{"code": "foo", ...}, {"code": "bar", ...}]'

现在,您的 JSP 包含以下行:

<select ng-model="detail" ng-init="Categories = '${Categories}'" ng-options="'${Category.code}' for Category in Categories">

评估 JSP 后,Angular 会发现:

<select ng-model="detail" ng-init="Categories = '[{"code": "foo", ...}, {"code": "bar", ...}]'" ng-options="'' for Category in Categories">

这可能接近你想要做的,但我认为解决这个问题的方法是:

JSP:

window.categories = ${Categories};

那是假设您的类别变量是 JSON。如果不是,您可能必须使用 Jackson 将其转换为 JSON,或通过 JSTL 手动转换(我建议您不要这样做)。现在,您有一个包含任何类别的 javascript 变量,因此您可以使用常规 Angular 逻辑对其进行迭代。

假设您有一个看起来像这样的 FooController:

angular.module("controllers")
    .controller("FooController", [
      "$scope",
      "$window",

      function($scope, $window) {
        $scope.categories = $window.categories;
      }
    ]);

现在您在范围内有了类别,因此您可以在视图中使用它们,如下所示:

<select ng-model="detail" ng-options="'category.code for category in categories">
于 2015-11-05T09:31:12.487 回答
1

我相信答案是肯定的(我很想测试一下,但我现在有点紧张)。JSTL 在服务器端处理以呈现 HTML(以及其他内容)。AngularJS 是在客户端处理的东西。

因此,我的理解是,在您上面给出的示例中,“类别”属性将设置为 ${Categories} JSTL EL 评估的字符串输出。

于 2015-06-25T13:48:28.357 回答