有条件地选择ng-model

时间:2014-06-11 23:00:22

标签: angularjs

我有一个UI组件,我试图通过支持两种不同的数据格式来保持灵活性。

我想有条件地选择哪个范围属性与ng-model元素的input配对。

此代码不起作用,但它表达了我的意图:

<input type="text"
       ng-model="treeNode.attachedEntity.name || treeNode.name"
/>

以下代码有效,但重复很多(此示例很简单,但在实际应用程序中,此输入附加了很多行为)

<!-- Rename File -->
<input ng-if="!treeNode.attachedEntity"
       ng-model="treeNode.name"
       type="text"/>
<!-- Rename Folder -->
<input ng-if="treeNode.attachedEntity"
     ng-model="treeNode.attachedEntity.name"
     type="text"/>

背景,如果它有帮助:这个模型类似于文件系统,其中对象附加到表示文件夹结构的treeNode。没有附加对象的treeNode是一个文件夹。我想要一个重命名操作,决定是否重命名文件夹或文件,具体取决于它正在操作的对象。

我可以用任何方式构建它,以便模板代码更简单吗?扩展ng-model的指令?我不知道的ng-model选项?控制器中的getter函数返回正确的模型?

谢谢!

1 个答案:

答案 0 :(得分:3)

是的,吸气剂将成为我认为类似

的方式
ng-model="getModel(param)[property]"

其中getModel将返回对您想要观察的对象的引用,缺点是您必须返回对象引用而不是属性以保留链接。

http://jsfiddle.net/NhPEN/之类的东西可以说明我的观点。非常简单,没有意义,但演示了如何使用函数检索对象并使用其属性作为模型,您可以使用其他函数生成属性名称并使其完全动态