0

ここで奇妙なエラー。私はこのフォームを持っています:

<form name="newaccount" id="newaccount" ng-submit="doSubmit()">
<label>username</label>
<input name="username" type="text" required ng-model="username">
<span ui-toggle="username.length > 15">Too long!</span>
<label>name</label>
<input name="name" type="text" required ng-model="name">
<label>e-mail</label>
<input name="email" type="email" required ng-model="email" ui-validate>
<label>password</label>
<input name="password" type="password" required ng-model="password" ui-validate>
<div style="text-align: center;"><br>
<input type="submit"></div>
</form>

そしてこのコントローラー:

$scope.username = "f";
$scope.password = "f";
$scope.email = "f";
$scope.name = "f";
$scope.doSubmit = function(){
    //Transition to progress view
    $scope.showLoginForm = false;
    $scope.showCreateForm = false;
    $scope.showLoading = true;
    $scope.resultSuccess = false;
    $scope.showResult = false;
    $scope.loadingMessage = "Creating account...";
    $scope.resultReason = "Success!";

    //Send POST
    $http({
        method: 'POST',
        url: "php/createaccount.php",
        data: {
            "username": $scope.username,
            "password": $scope.password,
            "name": $scope.name,
            "email": $scope.email
        }}
    ).success(function (data, status, headers, config) {
            $scope.showLoading = false;
            $scope.showResult = true;
            $scope.resultSuccess = data === "success";
            if($scope.resultSuccess){
                $scope.resultReason = "Account created successfully!";
            }else{
                $scope.resultReason = data;
            }

        }).error(function (data, status, headers, config) {
            $scope.showLoading = false;
            $scope.showResult = true;
            $scope.resultSuccess = false;
            $scope.resultReason = data;
        });
};

予想通り、各フィールドに「f」が表示されます。ただし、これらのフィールドを変更してからフォームを送信すると、サーバーは(投稿データにprint_r()を付けて)応答し、バックエンドが受信するJSONには常に各フィールドの値として「f」が含まれることを示します。変更された値ではありません。

例:ユーザー名「test」など

{"username":"f","password":"f","name":"f","email":"f"}

したがって、フォームに入力しても、何らかの理由で$scopeの値が更新されません。何が得られますか?

4

2 に答える 2

1

$http呼び出し内で個々の$scopeプロパティを割り当てる代わりに、スコープで「ラージオブジェクト」を使用します:$ scope.person = {username:'f'、...}。次に、そのオブジェクトを投稿できます。

これに特有の問題は、Angularが検証しない限りスコープ変数に値を書き込まないことでした。この場合、電子メールは適切に検証されていませんでした。

于 2013-01-27T22:50:02.477 に答える
0

スコープは「ng-app」と「ng-controller」を使用して明確に定義されていますか?

これらの2つのディレクティブがHTMLで見つかりませんでした。おそらくあなたはそれを質問の一部として含めなかったでしょう。

私が期待したサンプル構造:http://angularjs.org/#todo-html

于 2013-01-13T12:38:26.587 に答える