Javascript 无法修改由ng repeat生成的文本框

Javascript 无法修改由ng repeat生成的文本框,javascript,html,angularjs,Javascript,Html,Angularjs,我无法修改ng repeat生成的文本框。由于父/子作用域的原因,它也有点复杂 链接: 剧本: function ConfigController($scope) { $scope.config = {"key1":["a","b","c"]}; } function SettingController($scope) { var configKey = null; function update() { $scope.items = $scope.con

我无法修改ng repeat生成的文本框。由于父/子作用域的原因,它也有点复杂

链接:

剧本:

function ConfigController($scope)
{
    $scope.config = {"key1":["a","b","c"]};
}
function SettingController($scope)
{
    var configKey = null;
    function update() {
        $scope.items = $scope.config[configKey];
    }
    $scope.init = function(key) {
        configKey = key;
        update();
    };
    $scope.$watch('config', update, true);
}
标记:

<div ng-app ng-controller="ConfigController">
    Config: {{config}}
    <div ng-controller="SettingController" ng-init="init('key1')">
        Items: {{items}}
        <div ng-repeat="item in items">
            <input ng-model="item" type="text"/>
        </div>
    </div>
</div>

您需要将ng模型引用放入对象中。我认为Angular无法在数组中存储值

添加$scope.value:{key1:{a:'a',b:'b',c:'c'}}以存储每个字段的值,然后使用ng model=value['key1'][项]绑定输入

像这样:

顺便说一下,您可以在init中用一行代码替换所有更新/监视内容:

$scope.items = $scope.config[key];

您需要将ng模型引用放入对象中。我认为Angular无法在数组中存储值

添加$scope.value:{key1:{a:'a',b:'b',c:'c'}}以存储每个字段的值,然后使用ng model=value['key1'][项]绑定输入

像这样:

顺便说一下,您可以在init中用一行代码替换所有更新/监视内容:

$scope.items = $scope.config[key];

与绑定到原语不同,绑定到对象具有您想要的行为

 $scope.config = {"key1":[{value : "a"},{value:"b"},{value : "c"}]};
装订将是

<div ng-repeat="item in items">
    <input ng-model="item.value" type="text"/>
</div>
下面的链接解释了为什么这样做有效

阿尔特姆·安德列夫对另一个问题的回答很好地解释了这种行为。 复制相关部分:

您的示例如何直接绑定到每个元素 AngularJS 1.0.3:

您在输入中输入字母“f”; ngModelController更改项作用域名称数组的模型未更改=>name='Samf',name==['Sam','Harry','Sally']; $digest循环启动; ngRepeat将项目范围“Samf”中的模型值替换为未更改名称数组“Sam”中的值; ngModelController使用实际模型值“Sam”重新启动输入。
与绑定到原语不同,绑定到对象具有您想要的行为

 $scope.config = {"key1":[{value : "a"},{value:"b"},{value : "c"}]};
装订将是

<div ng-repeat="item in items">
    <input ng-model="item.value" type="text"/>
</div>
下面的链接解释了为什么这样做有效

阿尔特姆·安德列夫对另一个问题的回答很好地解释了这种行为。 复制相关部分:

您的示例如何直接绑定到每个元素 AngularJS 1.0.3:

您在输入中输入字母“f”; ngModelController更改项作用域名称数组的模型未更改=>name='Samf',name==['Sam','Harry','Sally']; $digest循环启动; ngRepeat将项目范围“Samf”中的模型值替换为未更改名称数组“Sam”中的值; ngModelController使用实际模型值“Sam”重新启动输入。
ng repeat绑定为它创建的每个项创建子范围。在这个子作用域上,您可以从父作用域读取所有类型,但如果更改诸如string、integer和boolean之类的基本类型,它会在子作用域上创建一个新对象,因此更改不会反映在父作用域模型上

如果您想在ng repeat中使用,ng模型应该使用点符号或复杂对象。差不多

<div ng-repeat="item in items">
            <input ng-model="item.text" type="text"/>
        </div>

其次,您正在尝试更改ng repeat自身绑定的模型。对此的任何更改都将导致ng repeat再次运行,并从父作用域重新绑定旧值。

ng repeat绑定将为其创建的每个项创建子作用域。在这个子作用域上,您可以从父作用域读取所有类型,但如果更改诸如string、integer和boolean之类的基本类型,它会在子作用域上创建一个新对象,因此更改不会反映在父作用域模型上

如果您想在ng repeat中使用,ng模型应该使用点符号或复杂对象。差不多

<div ng-repeat="item in items">
            <input ng-model="item.text" type="text"/>
        </div>
其次,您正在尝试更改ng repeat自身绑定的模型。对此的任何更改都将导致ng repeat再次运行,并从父范围重新绑定旧值