将当前的Angular.JS迭代器传递给表单提交中的函数?

时间:2014-12-12 17:30:47

标签: angularjs angularjs-scope angularjs-ng-repeat

我在使用以下HTML时遇到问题,不幸的是我不知道正确的Angular.js术语来正确地标题这个问题。

<body ng-controller ="GuessingGamesController as gamesCtrl">
    <h1>Guessing Game Test Page</h1>
    <div id="Game">
        <h2>Test Game</h2>
        <form name="StartGameForm" ng-submit="gamesCtrl.startNewGame()" ng-show="{{gamesCtrl.game.id === -1}}">
            <input type="submit" value="Start New Game" />
        </form>
        <ul>
            <li ng-repeat="turn in gamesCtrl.game.turns">
                {{turn.question}}?
                <form name="ReplyForm" ng-submit="gamesCtrl.nextTurn({{turn}})" novalidate>
                    <input type="text" ng-model="turn.answer" />
                    <input type="submit" value="Submit Answer" />
                </form>
            </li>
        </ul>
    </div>
</body>

失败的陈述是ng-submit="gamesCtrl.nextTurn({{turn}})",我在Chrome的开发者控制台中看到的错误是

  

错误:[$ parse:syntax]语法错误:令牌&#39; {&#39;列无效键   从[gamesCtrl.nextTurn({{turn}})]开始的表达式中的21个   [{转}})]。

如何将当前的Angular.JS迭代器传递给表单提交中的函数?

1 个答案:

答案 0 :(得分:5)

你不应该在表达式中使用插值,只需: -

gamesCtrl.nextTurn(turn);
来自当前执行范围的

turn将传递给方法nextTurn

您也不需要在ng-show中进行插值,您只需提供将由ng-show指令计算的表达式(而不是插值,如果提供插值,实际绑定表达式将成为需要根据范围进行评估的值false / true: -

ng-show="gamesCtrl.game.id === -1"