2016-10-19 48 views
0

我使用相同的form來創建和更新數據庫中的用戶。我可以正確更新,但是當我創建一個用戶時,請提交兩次發送並在數據庫中創建兩個相同的用戶。Ng-submit使用RouteProvider調用兩次

我在RouteProvider

.config(function($routeProvider) { 
     $routeProvider 
      .when("/users", { 
       controller: "MainControlador", 
       templateUrl: "templates/users.html" 
      }) 
      .when("/user/:id", { 
       controller: "UserControlador", 
       templateUrl: "templates/user.html" 
      }) 
      .when("https://stackoverflow.com/users/edit/:id", { 
       controller: "UserControlador", 
       templateUrl: "templates/form.html" 
      }) 
      .when("https://stackoverflow.com/users/new", { 
       controller: "NewUserControlador", 
       templateUrl: "templates/form.html" 
      }) 
      .when("/", { 
       templateUrl: "templates/main.html" 
      }) 
      .otherwise("/"); 
    }) 

這是我form

<div> 
     <form ng-submit="saveUser()"> 
     <input ng-model="user.name" type="text" required> 
     <input ng-model="user.surname" type="text" required> 
     <input ng-model="user.phone" type="text"required> 
     <input ng-model="user.email"type="text" required> 
     <input type="submit"> 
     </form> 
</div> 

最後我用這個controller

//Controller Update 
.controller("UserControlador", function($scope, $routeParams, UserAPI) { 
     $scope.title = "Edit user"; 

     UserAPI.getOne($routeParams.id).success(function(data) { 
      //Get Array First Element 
      $scope.user = data[0]; 
     }) 

     $scope.saveUser = function() { 
      var data = ({ 
       id: $routeParams.id, 
       name: $scope.user.name, 
       surname: $scope.user.surname, 
       phone: $scope.user.phone, 
       email: $scope.user.email 
      }); 
      UserAPI.update(data).success(function(data) { 
       $scope.user = data; 
      }) 
     } 

    }) 
    //Controller Create 
    .controller("NewUserControlador", function($scope, UserAPI) { 
     $scope.title = "Add user"; 
     $scope.saveUser = function() { 
      var data = ({ 
       name: $scope.user.name, 
       surname: $scope.user.surname, 
       phone: $scope.user.phone, 
       email: $scope.user.email, 
      }); 
      UserAPI.create(data).success(function(data) { 
       console.log(data); 
       $scope.user = data; 
      }) 
     } 
    }) 

¿任何想法,這裏發生什麼事?我試圖使用console.log,但顯然所有工作正常。我試圖使用過角的batarang來調試角度調用,但不工作。

+0

你能提供你的提交輸入嗎? – Korte

+1

提交返回正確的值。也許錯誤是函數調用。 –

+1

我在'form'標籤裏面沒有看到任何負責提交表格的按鈕 –

回答

1

一個非常愚蠢的錯誤。在我的PHP代碼我有這個...

<?php 
$conexion = new PDO("mysql:host=localhost;dbname=httpcrud;charset=utf8", "root", ""); 
$userName = $_GET['userName']; 
$userSurname = $_GET['userSurname']; 
$userPhone = $_GET['userPhone']; 
$userEmail = $_GET['userEmail']; 
$sql=$conexion->query("INSERT INTO users (name,surname,phone,email) VALUES('$userName','$userSurname','$userPhone','$userEmail')"); 
$json = json_encode($sql->execute()); 
echo $json; 
?> 

當我使用$sql->execute()query()的提交重複insert。我刪除$json= json_encode($sql->execute());$json = json_encode($sql),最後所有的作品都完美無缺。

0

您已經定義了兩個控制器,一個用於保存用戶(NewUserControlador)和一個用於更新(UserControlador)。這兩種方法都稱爲saveUser(),它們在$ scope中聲明。

由於名稱相同,可能會有衝突。 爲什麼你不使用一個控制器進行這些操作?畢竟他們都是同一個實體(用戶)的CRUD操作。

如果你仍然想使用兩個不同的控制器,你可以使用一些記錄,找出發生了什麼或更大的想法是重命名UserControlador的更新方法。

有關作用域的詳細信息,可以發現here

+0

如果我把創建和更新功能放在同一個控制器中,發生同樣的錯誤,在數據庫中創建兩個相同的用戶> - < –