Play framework:将scala模板参数传递给Javascript(角度)的最佳方式是什么?

Play framework:将scala模板参数传递给Javascript(角度)的最佳方式是什么?,java,javascript,angularjs,scala,playframework-2.0,Java,Javascript,Angularjs,Scala,Playframework 2.0,假设我想将字符串列表传递给我的模板,并通过迭代创建一个ul我不想使用ng init。 行动: public static Result login(){ List<String>Names = Arrays.asList("Tom","Dick","Harry"); return ok(login.render(Names)); } 公共静态结果登录(){ ListNames=Arrays.asList(“汤姆”、“迪克”、“哈里”); 返回ok(login.

假设我想将字符串列表传递给我的模板,并通过迭代创建一个ul我不想使用ng init。

行动

 public static Result login(){

    List<String>Names = Arrays.asList("Tom","Dick","Harry");

    return ok(login.render(Names));
}
公共静态结果登录(){
ListNames=Arrays.asList(“汤姆”、“迪克”、“哈里”);
返回ok(login.render(Names));
}
login.scala.html

@(names: List[String])

<!DOCTYPE html>

<html ng-app="app">

<body>

    <div ng-controller="appCtrl">
        <ul>
          <li ng-repeat="name in names">{{name}}</li>
        </ul>
    </div>

</body>

<script>
    app = angular.module("app", []);

    app.controller('appCtrl', function($scope){

        $scope.names = @Html(names); 
        //This does not work
        // Error : type mismatch; found : java.util.List[String] required: String

    });

</script>
</html>
@(名称:列表[字符串])
  • {{name}
app=角度模块(“app”,[]); app.controller('appCtrl',函数($scope){ $scope.names=@Html(名称); //这行不通 //错误:类型不匹配;找到:java.util.List[String]必需:String });
如前所述,您可以在传递到
@Html
之前使用Scala格式化来显示它,而无需转义

<!-- language: scala -->
@Html(names.mkString("[",",","]"))
// Formats list by starting with '[', ending with ']', with ',' as separator
// aka JS format for array

@Html(names.mkString("""["""", """","""", """"]"""))
// wraps array values with ""

@Html(names.mkString(“[”,“,”,“]))
//通过以“[”开头,以“]”结尾,以“,”作为分隔符来格式化列表
//数组的aka JS格式
@Html(名称.mkString(“”[“”,“”,“”,“”,“”,“”]“”)
//将数组值包装为“”

注意:如果字符串值包含“字符,则需要额外的格式设置

这没有任何意义。即使
@Html
将该列表转换为ul列表,也会出现语法错误。也许你想把它转换成js列表?请更清楚地说明您想要实现的目标您可能不知道,但是,
@Html
只是在输出上写入给定值,而没有自动将其格式化为Html(因为此函数特别希望通过手动将给定值格式化为Html)。所以它在任何情况下都不会进行这样的神奇转换,从而添加
标签。@Salem,applicius:请原谅我在这里没有明确说明。我正在尝试更新$scope.names,这意味着我需要它作为JS数组(或对象,也可以)。Angular将使用数组“名称”创建
    标记。无效@Html(names.mkString(“[”,“,”,“]”)//错误:Tom未定义@Html(names.mkString(“[”,“,”,“,”,“])//错误:未关闭的多行字符串literalFirst错误与提到的代码不对应,其中不包括任何
    Tom
    ,因此,请检查代码的编写方式。第二个是明显的打字错误(若不看编辑后的答案和ScalaDocAboutString),正如前面所说的,您需要根据您的值和想要的输出调整格式。如果有效,请接受答案。好的,对于第一个,“Tom”是上面代码列表中的第一个值。所以我不确定你回答的第一部分是否正确。但我有第二个选择。多谢!我还必须传递各种数据格式。下一个是对象列表。我仍然不明白为什么我们要用这么多双引号。所以不知道如何为对象执行此操作。将感谢更多的投入。