AngularJS:绑定一次属性
AngularJS: Binding once to an attribute
我试图将一个对象键/字段绑定到属性的值(data-oldField
),这样,如果它的值通过用户输入(angular x-editable tables
)更改,我可以通过data-newField
获取html元素并获得data-oldField
的值,这样我就可以重命名对象中的字段/键。我曾尝试使用本机::
表达式绑定一次,但当提交对字段名称的更改时,data-oldField
的值会发生变化,因此date-oldField
和data-newField
的值随后相等,这正是我不希望的。
我还尝试使用angular-once
库,并根据api添加指令once once-attr-field='field'
,但我得到了相同的结果。
<tr ng-repeat='(field, value) in user.data'>
<td>
<span editable-text='field' e-name='name' e-form='rowform' data-newField='{{ field }}' data-oldField='{{ ::field }}' e-required>
{{ field }}
</span>
</td>
...
</tr>
编辑:
Plunker
我无法获得要在视图中显示的data-oldfield
和data-newfield
属性的值,但如果您使用浏览器的开发工具观察属性的值并按下"重命名字段"按钮,您可以看到即使我使用一次性绑定,data-oldfield
的值也会发生变化。也许我误解了$watcher是如何处理这种绑定的?
从角度文档来看,使用::
将对象更新为新值,但不会更新为查看:
An expression that starts with :: is considered a one-time expression. One-time expressions will stop recalculating once they are stable, which happens after the first digest if the expression result is a non-undefined value (see value stabilization algorithm below).
我不太确定我是否理解这个问题,但一种方法是在控制器中定义了一个函数,该函数将在ng-change
上调用,可以执行您的逻辑。
另一种是$watch
型号,但观看可能很昂贵
更新
我有点困惑你到底想实现什么,但这里有一个有ng变化的plunkr,你可以使用对象的副本引用$scope.user
的新值和旧值。您也可以使用renameField
函数,但是您希望
相关文章:
- Javascript返回值只在循环中返回一次
- 使用 JavaScript 一次为一个元素设置多个属性
- 是否有脚本/代码可以一次将链接属性添加到多个链接
- 有没有一种方法可以在一次调用中修改每个jquery对象的特定属性
- 为下一次实例化设置的主干视图属性
- 我可以在 D3 中一次指定两个属性吗?
- “渲染一次”;同时“;属性更改
- Jquery获取最近一次单击的属性ID
- AngularJS:绑定一次属性
- 只设置一次Module属性
- 如何一次打印对象中的所有属性/值.JS
- 在for循环的每一次迭代中都会计算.length属性
- 我可以添加onmouseover属性只运行一次吗?
- 平滑地动画属性改变到3000个拉斐尔对象一次
- 在没有jquery的情况下一次设置多个属性
- 使用jquery一次简化多个属性的编写
- Emberjs:如何一次过滤多个属性
- 输入字段类型文本具有onkeypress调用函数不止一次的属性
- 一次更改多个CSS属性
- ng2 初始化 DOM 属性一次并删除更改检测