【问题标题】:Select with ng-change causing all select fields automatically changed使用 ng-change 选择会导致所有选择字段自动更改
【发布时间】:2017-09-19 13:29:26
【问题描述】:

我知道标题有点混乱,但我已尽力用一句话来描述它。我想在使用 CodeIgniter 构建的选择字段中使用角度 ng-change。这些选择是从数组中生成的。一切都很好,除了当我更改其中一个时,这些选择会自动为所有选择字段选择相同的值。

<?php $i=1; foreach ($data as $d) : ?>
Username: <input type="text" value="<?php echo $d->username ?>" /><br/>
Person: 
  <select ng-model="formData[<?php echo $i ?>].id" ng-change="updateUser()">
    <option value="1">Nina</option>
    <option value="2">Naila</option>
    <option value="3">Noni</option>
  </select><br/>
<?php $i++; endforeach; ?>

因此,例如,当我通过在第一个选择字段中选择 Nina 来更改选择时,所有选择字段都会自动选择选项 Nina。

更新: 在控制器中:

    angular.module('myApp')
.controller('userCtrl', function($scope,$http){

   $scope.formData = {};
   $scope.updateUser = function(){
      for (var i=1; i < $scope.formData.length; i++){
         console.log($scope.formData[i]);
      }
   }

有了这个,当我在控制台中检查它时,我什么也没得到。

我尝试在选择时添加属性name=id[],但仍然没有运气。请帮忙。谢谢。

【问题讨论】:

  • 那是因为你在所有选择上都使用相同的模型ng-model="formData.id"
  • 所以,这就是问题所在。那么当我需要检索所选选项的值时,您能告诉我应该怎么做才能避免这种情况发生吗?
  • @Abaij 查看该答案,如果它回答了您的问题,请告诉我 :)

标签: javascript php angularjs codeigniter angular-ngmodel


【解决方案1】:

我会避免将php 视图与AngularJS 混合在一起,但由于您无法更改这一点,您可以尝试基于模型索引(因为正如我在评论中提到的,这里的问题是使用相同的@ 987654321@ 为所有select elements)。像这样的东西可以工作:

<?php $index = 0; ?>
<?php foreach ($data as $d) : ?>
Username: <input type="text" value="<?php echo $d->username ?>"/><br/>
Person:
<select ng-model="formData[<?php echo $index ?>].id" ng-change="updateUser()">
    <option value="1">Nina</option>
    <option value="2">Naila</option>
    <option value="3">Noni</option>
</select><br/>
<?php $index++; ?>
<?php endforeach; ?>

【讨论】:

  • 是的,现在它们不会自动更改,但我得到了 unidentified 的值。我不知道如何在角度控制器中检索它。
  • 在 angularjs 控制器中,您必须检查 formData 数组,它应该包含所有值。你能从控制器发布一些相关的代码吗?
  • formData 应该初始化为数组$scope.formData = [];;为什么循环不是从0 开始,而是从1 开始:var i=1;?您是否也可以检查生成的标记,是否类似于ng-model="formData[0].id"ng-model="formData[1].id" 等?我在php 方面不太好:)
  • @Abaij 很高兴它对您有所帮助。
【解决方案2】:

您的问题是由于您为每个ng-model 使用formData.id。因此ng-model 将更新为“1”(Nina),所有使用formData.id 的选择元素也将更改为“1”(Nina)。

<?php $index = 0; ?>
<?php foreach ($data as $d) : ?>
Username: <input type="text" value="<?php echo $d->username ?>"/><br/>
Person:
<select ng-model="formData[<?php echo $index ?>].id" ng-change="updateUser()">
    <option value="1">Nina</option>
    <option value="2">Naila</option>
    <option value="3">Noni</option>
</select><br/>
<?php $index++; ?>
<?php endforeach; ?>

在您的控制器中,初始化 formData 数组:$scope.formData = []; 然后 formData[0].id 将具有第一个选择的值,formData[1].id 为第二个,依此类推。

【讨论】:

  • 感谢ng-model="formData[&lt;?php echo $index ?&gt;].id"。这很重要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-27
  • 2016-05-29
  • 2016-03-06
  • 1970-01-01
  • 2018-04-19
相关资源
最近更新 更多