【问题标题】:AngularJS/PHP form inside ng-repeat : how to get specific datang-repeat 中的 AngularJS/PHP 表单:如何获取特定数据
【发布时间】:2018-08-20 08:38:55
【问题描述】:

我有一个由 ng-repeat 组成的表单(针对每个需求)。 用户将能够编辑此 ng-repeat 中的“日期 réalisation”或“motif refus”,然后单击按钮提交“Valider la modify”,仍在此 ng-repeat 中(编辑需求中的需求)。

代码如下:

<div class="jumbotron" ng-controller="gestDemInstallController">
<h1 class="text-center">{{ soustitre }}</h1>

<p>{{presentation}}</p>


      <!--une ligne pour chaque demande
      utilisation de getDataDemandesInstall.php
      et de getDataDemandesInstallApplis.php
      -->

      <form> 
      {{ reussite }}<!-- indique un msg au clic du gestionnaire -->

      <br><!-- on affiche chaque demande d'installation -->
      <div ng-repeat="dem in demandesInstallations" class="tableau">
          <br>
          <label>ID :</label>
          {{dem.id}}

          <br>
          <label>Ordinateur :</label>
          {{dem.nomPC}}

          <br>
          <label>Date demande :</label>
          {{dem.dateDemande}}

          <br>
          <label>Date réalisation :</label>
          <input ng-model="date_real" type="date" value="{{dem.dateRealisation}}" class="form-control input-normal bouton">
          Date enregistrée: {{dem.dateRealisation}}

          <br><br>
          <label>Motif refus :</label>
          <input ng-model="motif_refus" type="text" value="{{dem.motifRefus}}" class="form-control input-normal bouton">

          <br>
          <label>Unité :</label>
          {{dem.unite}}

          <br>
          <label>Demandeur :</label>
          {{dem.demandeur}}


          <br>
          <!--boucle ng-repeat affichant chaque appli et profil choisi-->
          <div ng-repeat="a in demandesInstallApplis">
            <label><i>Applications demandées</i></label><br>

            <label>Nom application :</label>
            {{a.nom}}

            <br>
            <label>Profil demandé :</label>
            {{}}
          </div><!--fin ligne les applications-->


          <input ng-model="btn{{dem.id}}" ng-click="checkGestDemInstall()" type="button" value="Valider la modification" class="form-control">

      </div><!--fin de la demande, fin du ng-repeat-->

      </form>  

这里是控制器(AngularJS)

//----RECUPERATION DES DONNEES : METHODE POST---------//
//----------------------------------------------------//

$scope.checkGestDemInstall = function(){
    //on valide les données entrées
    //on peut ensuite les envoyer au script PHP
    //en utilisant la méthode HTTP Post

    var error=0;

    /*---- Le mot de passe est vérifié --*/

    //si pas d'erreur (ni d'erreur mdp ni d'erreur id/mail)
    if (error === 0) {
        //on lance la méthode POST de la requête HTTP
        var request = $http({
            method: "post",
            url: "/sio2/projets/gedeon_php/pages/postGestDemInstall.php",
            data: {
                //celui qui a été cliqué
                date_real: $scope.date_real,
                motif_refus: $scope.motif_refus
            },
            headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
        });
        /* Check whether the HTTP Request is Successfull or not. */
        request.success(function (data) {
            $scope.reussite = "Données bien envoyées : "+data +" (information réceptionnée de PHP)";
        });
    }
    else {
        $scope.reussite = "Vous avez mal rempli le formulaire. Erreur de type : " + error;
    }

}; //fin fonction checkGestDemInstall()

正如您在我的控制器中看到的那样,我想获取我的数据,我的意思是 dem.date_real 和 dem.motif_refus,而我对每个输入都有相同的 ng-model... 实际上我有几个输入(一个由 ng-repeat 提供),我真的不知道如何从编辑的“date_real”和编辑的“motif refus”中获取数据。

感谢您的任何建议!

////////////////// 感谢您的建议,我现在有了这些代码,但仍有一些错误: 错误 1: $parse:syntax

错误 2: ngRepeat:dupes

在我的 ng-repeat 需求中:

<label>Date réalisation :</label>
        <input ng-model="dem.dateRealisation" type="text" value="{{dem.dateRealisation}}" class="form-control input-normal bouton">
        Date enregistrée: {{dem.dateRealisation}}

        <br><br>
        <label>Motif refus :</label>
        <input ng-model="dem.motifRefus" type="text" value="{{dem.motifRefus}}" class="form-control input-normal bouton">

在我的控制器中:

data: {
                    //celui qui a été cliqué
                    date_real: $scope.dateRealisation, //= new Date(dateRealisation),//error ngModel:datefmt
                    motif_refus: $scope.motifRefus
                },

然后在这里发布我的数据,我想通过在 PHP 中回显它来检查它,就像我通常在插入之前所做的那样......

    include('../bdd/conn.php');

$postdata = file_get_contents("php://input");
$request = json_decode($postdata);
@$date_real = $request->dateRealisation;
@$motif_refus = $request->motifRefus;


echo 'date real : '. $date_real . ' motif refus : '. $motif_refus; 

我喜欢一切都可以理解,所以我做了一个小计划来解释:

【问题讨论】:

  • 我不明白你的问题。你用谷歌翻译吗?请解释你的问题。所以我们可以帮助你。谢谢。
  • 我编辑了最后的解释,如果有困惑,对不起,我最近开始学习 AngularJS ;)

标签: javascript angularjs forms post angularjs-ng-repeat


【解决方案1】:

如果我理解正确,请将您的 ng-model 更改为 dem.dateRealisationdem.motifRefus 而不是 date_realmotif_refus。如果您使用在作用域上定义的变量,那么对于您更改日期的每个需求都会更新这些变量,每个变量只返回一个值。

如果您希望在 Post 请求中发送的数据包含每个需求的日期,那么您必须发送不同的对象。您可以发送demandesInstallations,然后更改此数据对象的处理方式

【讨论】:

  • 非常感谢您的回答!我仍然有一些错误,也许我也没有很好地解释我的 pb !所以实际上如果用户只想修改1个日期,或者1个motif_refus,他将能够点击这两个输入对应的按钮(我的意思是在同一个重复中)。但是用户永远不会在 1 次内编辑所有日期。所以我更新了我的问题(我的方法 POST 目前仍然不起作用),由于我的语法,我仍然无法从这个 ng-repeat 中获取我的数据
  • 好的,我误解了你的问题。尝试将您的提交按钮更改为&lt;input ng-model="btn{{dem.id}}" ng-click="checkGestDemInstall(dem)" type="button" value="Valider la modification" class="form-control"&gt;,然后更改您的 checkGestDemInstall 函数以接受 dem 对象。然后在您发送的数据对象中更改date_real: dem.dateRealisationmotif_refus: dem.motifRefus
  • 谢谢你,我试过了,但是当我点击按钮时没有任何反应。我现在有
  • 我不太确定我在函数的这个数据 { ... } 中放入了什么,现在将对象 dem 作为参数...我的意思是,我在哪里说程序:用户点击了那个按钮?非常感谢您的解释和帮助! :)
  • 当您传入 dem 对象时,您不需要将 $scope 放入您的数据对象中。所以data: { date_real: dem.dateRealisation, motif_refus: dem.motifRefus}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 2018-01-14
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多