我试图将对象键/字段绑定到属性值data-oldField
),这样如果它的值通过用户输入(angular x-editable tables
)更改,我可以通过以下方式获取html元素data-newField
并获取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>
我无法获取要在视图上显示的data-oldfield
和data-newfield
属性的值,但如果您使用浏览器的开发工具观察属性的值并按&#34;重命名字段&#34;按钮,即使我使用一次性绑定,您也可以看到data-oldfield
的值发生了变化。也许我误解了观察者如何为这种约束工作?
答案 0 :(得分:0)
从角度文档中可以看出,使用::
会将对象更新为新值,但不会更新为查看:
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
模型,但观看可能很昂贵
更新
我有点困惑你到底想要完成什么,但这里有一个plunkr,它有一个ng-change,你可以在那里引用新值和{{1的旧值使用对象的副本。您也可以使用$scope.user
功能