0

編集:フォームで ng-model="$parent.selectedAnswer" を変更すると、機能します。誰かがそれを説明できるなら、私はそれを答えとしてマークします。

「次へ」ボタンをクリックすると、選択したラジオボタンの値を角度関数に収集しようとしていますが、常に未定義です。何が悪いのか本当にわかりません。ラジオ ボタンと値が html に適切に入力されます。次をクリックして選択した値を渡そうとしたときにのみ失敗します。

私のロジックは単純です。各ラジオ ボタンの値は [branchid、leafid、answerid] の配列です。次にクリックすると、その値を「selectedAnswer」モデルにバインドし、angularjs 側の next() 関数に渡します。

関連するコードは次のとおりです。

app.controller('GameNode', function ($scope, $http) {

    function load(selectedAnswer) {
        var leafId = 0, branchId = 0, answerId = 0;
        alert(selectedAnswer); //this is always undefined
        if (selectedAnswer !== undefined && selectedAnswer != null) {
            branchId = selectedAnswer[0];
            leafId = selectedAnswer[1];
            answerId = selectedAnswer[2];
        }

        $http.get("/AccountRequest/GetNode?branchId=" + branchId +
            "&leafId=" + leafId +
            "&answerId=" + answerId)
            .success(function(data) {
                $scope.node = data;
            });
    }

    $scope.next = load;
    load();
});

--------------------------------------html側----------------------- ------------------------

<div class="container-fluid" ng-app="AccountRequest" ng-controller="GameNode">
    <div class="row-fluid">
        <div class="span2"></div>
        <div class="span10">
            <form>
            <span>{{node.Question.Text}}</span>
            <div class="radio" ng-repeat="answer in node.Answers">
                <input type="radio" id="answerGroup" name="answerGroup" ng-model="selectedAnswer" 
                       value="[{{answer.BranchId}},{{node.LeafId}},{{answer.Id}}]"/> {{answer.Text}}
            </div>
            <div>
                <input type="button" ng-click="next(selectedAnswer)" value="Next" id="Next"/>
            </div>
            </form>
        </div>
    </div>
</div>
4

2 に答える 2

1

selectedAnswerng-repeat がアイテムごとに新しい子スコープを作成し、繰り返しアイテムの外で初期化されていないため、selectedAnswer常にundefined親スコープにあるためだと思います。これを修正するには、次のようにします。

      <form ng-init="outside={}">
        <span>{{node.Question.Text}}</span>
        <div class="radio" ng-repeat="answer in node.Answers">
            <input type="radio" id="answerGroup" name="answerGroup" ng-model="outside.selectedAnswer" 
                   value="[{{answer.BranchId}},{{node.LeafId}},{{answer.Id}}]"/> {{answer.Text}}
        </div>
        <div>
            <input type="button" ng-click="next(outside.selectedAnswer)" value="Next" id="Next"/>
        </div>
      </form>
于 2013-05-24T16:13:24.597 に答える
0

コントローラーで $scope.selectedAnswer を定義すると、問題は解決しますか?

app.controller('GameNode', function ($scope, $http) {
    $scope.selectedAnswer = null;
    function load(selectedAnswer) {
        var leafId = 0, branchId = 0, answerId = 0;
        alert(selectedAnswer); //this is always undefined
        if (selectedAnswer !== undefined && selectedAnswer != null) {
            branchId = selectedAnswer[0];
            leafId = selectedAnswer[1];
            answerId = selectedAnswer[2];
        }

        $http.get("/AccountRequest/GetNode?branchId=" + branchId +
            "&leafId=" + leafId +
            "&answerId=" + answerId)
            .success(function(data) {
                $scope.node = data;
            });
    }

    $scope.next = load;
    load();
});

そうでない場合は、使用する jsFiddle を作成します。

于 2013-05-24T16:12:42.120 に答える