angularJs - 两种不同结构的不同模型可以同步或共享状态吗?

时间:2014-06-22 03:08:21

标签: javascript angularjs

我有一个复选框和值列表,我从一个从数据库返回的列表中加载。

控制器

listA = ['item1','item2'...'itemn']; //Master list of items
$scope.selectedItems = ["item1",... "item5"]; //selected items
$scope.attributesModel = [                 //new model based on selected items
    {"index":5,"attribute":"item1"},
    {"index":10, "attribute":"item2"},
    {"index":13, "attribute":"item3"},
    {"index":21, "attribute":"item4"},
    {"index":24, "attribute":"item5"}

];

查看第1部分

  <td>
      <div class="checkbox checkbox-notext">
        <input checklist-model="selectedItems" checklist-value="key" type="checkbox" id="{{key}}" ng-disabled="exceededLimit &amp;&amp; !checked" />
      </div>
    </td>
    <td>
      <label for="{{key}}">{{key}}{{$index}}</label>
    </td>

查看第2部分

<div ng-repeat="(index, row) in attributesModel" >
<div class="margin10">
<div>Index<input ng-model="row.index" value="row.index" type="number" class="indexInputs"></input>{{row.attribute}}</div>
</div>
</div>

现在我想同步$ scope.selectedItems和$ scope.attributesModel。取消选中复选框后,selectedItems和attributesModel模型都会删除该项,反之亦然。因此,每当有人检查新复选框时,它们都会显示一个带有空文本字段的attributesModel,以键入索引值。

catch 对于添加到attributesModel的每个新选择的项,索引键最初为null。创建新项目后,用户必须输入新索引#。

我尝试过使用手表,但我遇到的问题是当选择新项目时,我无法访问该项目本身。我只能访问列表而不知道新项是X还是删除的项是Y是为了推送/删除正确的项目。

所以这可能是我失踪的手表解决方案。

如果我能澄清任何事情,请告诉我。

1 个答案:

答案 0 :(得分:1)

我不确定问题是什么,但您可以在复选框上使用ngChange

<input type="checkbox" ... ng-change="..." />

我认为你有一份清单指令或其他东西,所以应该在那里做点什么,但是(因为你不与我们分享)我不知道究竟是什么:)


<强>更新

由于checklist指令是外部依赖项,因此您可以在代码中处理ng-chage:

<input type="checkbox" ... ng-change="changed(key)" />

/* In the controller: */
...
$scope.changed = function (key) {
    if ($scope.selectedItems.indexOf(key) === -1) {
        // The checkbox for `key` was unchecked...
    } else {
        // The checkbox for `key` was checked...
    }
};