我在这个网站上查看了许多答案/问题,但似乎没有一个能解决我的问题。如果我错了,我道歉。
这是我的示例的链接,因此您可以查看我的代码及其行为:示例代码
考虑两个对象:
items = {
a: "apple",
b: "banana"
};
lines = [
{key: "a"},
{key: "b"},
{key: "b"},
{key: "a"}
];
我将它们显示如下:
<div ng-repeat="line in lines">
<div ng-click="clicked(items[line.key])">
{{items[line.key]}}
</div>
</div>
请注意,“行”包含重复值,并且项目是一组(唯一项目)。
在我正在创建的应用程序中,当用户单击其中一行时,我需要提供一个输入字段来更新行键指向的项目。而且,我需要双向绑定,以便通过输入的更改自动反映在整个行中。
在我的示例中(参见上面的链接),我添加了两个输入标签:
Input 1: <input ng-model="items.a">
Input 2: <input ng-model="mymodel">
输入 #1 使用对项目的显式引用设置 ng-model。输入 #2 使用 $scope 中存在的变量设置 ng-model 的值。
<div ng-click="clicked(items[line.key])">
当用户通过 ng-repeat 单击 div(行)输出时,mymodel 的值会发生变化。
输入 1 按预期工作。通过输入所做的更改会自动反映在生成的 div 中。
输入 2 代表我要完成的工作:将输入元素中的 ng-model 动态绑定到用户单击的 div 行中的同一模型。在我提供的示例中,正确的文本显示在输入中,但它与具有相同键的 div 行之间没有双向绑定。
这是我的完整脚本:
var myApp = angular.module("myApp",[]);
myApp.controller("mainCtrl", function ($scope) {
$scope.items = {
a: "apple",
b: "banana"
};
$scope.lines = [
{key: "a"},
{key: "b"},
{key: "b"},
{key: "a"}
];
$scope.mymodel = $scope.items.a;
$scope.clicked = function(key) {
$scope.mymodel = key;
};
});
这是我的 index.html:
<!DOCTYPE html>
<html>
<body ng-app="myApp" ng-controller="mainCtrl">
Input 1: <input ng-model="items.a">
Input 2: <input ng-model="mymodel">
<div ng-repeat="line in lines">
<div ng-click="clicked(items[line.key])">{{items[line.key]}}</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js"></script>
<script src="script.js"></script>
</body>
提前感谢您的帮助!