Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 一次选择所有ng模型更改_Javascript_Html_Angularjs_Select - Fatal编程技术网

Javascript 一次选择所有ng模型更改

Javascript 一次选择所有ng模型更改,javascript,html,angularjs,select,Javascript,Html,Angularjs,Select,嗨。 我的申请有问题。我必须使用ng repeat编写几个选择,每个选择都必须用相同的数据填充 问题是,当一个值被更改时,其他选择都是对相同值的更改-为什么 我想问题出在ng模型中——也许我不理解ng模型的“层次结构”是如何工作的 如果ng模型的名称是唯一的“选项”-它不起作用 如果ng模型的名称是“something.option”-它也不是 工作 如果ng模型的名称是“something.else.option”-它确实有效 但是所有的选择都被填满了 HTML: <div ng-c

嗨。
我的申请有问题。我必须使用ng repeat编写几个选择,每个选择都必须用相同的数据填充

问题是,当一个值被更改时,其他选择都是对相同值的更改-为什么

我想问题出在ng模型中——也许我不理解ng模型的“层次结构”是如何工作的

  • 如果ng模型的名称是唯一的“选项”-它不起作用
  • 如果ng模型的名称是“something.option”-它也不是 工作
  • 如果ng模型的名称是“something.else.option”-它确实有效 但是所有的选择都被填满了
HTML:

<div ng-controller="MyCtrl">
  <div ng-if="models" ng-repeat="m in models">
    <br><label>{{m.model}} ({{m.no}})</label><br>

    <select ng-model="models.m.opModel" ng-options="opt.value as opt.text for opt in options" ng-change="foo()"></select>
    </div>
 </div>
var myApp = angular.module('myApp',[]);

function MyCtrl($scope) {
    $scope.models = [
         {'no':'A', 'model':'alpha'},
         {'no':'B', 'model':'beta'},
         {'no':'C', 'model':'gamma'}
         ];
    $scope.options = [
         {'value':1, 'text':'one'},
         {'value':2, 'text':'two'},
         {'value':3, 'text':'three'}
         ];

     $scope.foo = function(){
                alert($scope.models.m.opModel);
     }
}
我做错了什么


非常感谢。

您将绑定到单个对象
模型
。在ng repeat内,repeated在“范围内”可用。您可能希望将此代码更改为:

<div ng-controller="MyCtrl">
  <div ng-if="models" ng-repeat="m in models">
    <br><label>{{m.model}} ({{m.no}})</label><br>

    <select ng-model="m.opModel" ng-options="opt.value as opt.text for opt in options" ng-change="foo()"></select>
    </div>
 </div>


{{m.model}}({m.no}})

看看
ng model=“m.opModel”
,这就是我所改变的。现在,您正在更新单个项的值,而不是将新对象插入一个数组中,然后该数组将被所有ng重复项重用(这就是为什么所有值将同时更新)。

您创建了一个名为“m”的范围对象,它是“模型”列表的当前子对象。因此,对于每个下拉列表,您将有一个不同的“m”范围对象。这就是您需要在ng模型中绑定的内容,以便将下拉列表绑定到“模型”列表中唯一的父项


更改为
模型.m.opmodel
更改为
模型.m.opmodel
。在您的演示中,您使用
模型
将所有选择绑定到同一个模型,您希望每个模型的选择都是唯一的。这不起作用。当我更改它时,
foo()
函数未被调用…
$scope.models.m
未定义。与@pkeuter所说的相同,但是foo()函数如何访问值?谢谢。我接受了@Dr.Cool的回答,因为他对我的问题有更复杂的解决方案(从js访问值)
 $scope.foo = function(index){
   alert($scope.models[index].opModel)
 }
<select ng-model="m.opModel" ng-options="opt.value as opt.text for opt in options" ng-change="foo($index)"></select>