【问题标题】:Can angular.js communicate with JSTL expression language?angular.js 可以和 JSTL 表达式语言通信吗?
【发布时间】:2014-12-04 21:06:10
【问题描述】:

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

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

【问题讨论】:

    标签: javascript angularjs jstl angularjs-ng-repeat angularjs-ng-init


    【解决方案1】:

    不可能有 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">
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-28
        • 2021-08-02
        • 1970-01-01
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多