2014-06-11 89 views
1

我有一個UI組件,我試圖通過支持兩種不同的數據格式來保持靈活性。有條件地選擇模型

我想有條件地挑選哪個範圍屬性與input元素的ng-model配對。

此代碼不能正常工作,但它表達了我的意圖:

<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模型的選項我不知道?控制器中的返回正確模型的getter函數?

謝謝!

+0

getter函數將是我的第一本能。但是變得富有創意,您可以根據中繼器字段上的屬性或您正在使用的任何屬性,在模型對象上引用不同的屬性。 [Plunker](http://plnkr.co/edit/byLor7D7iIU4XzIFWBgc?p=preview) –

+0

是一個getter將是我想要的東西像ng-model =「getModel(param)[property]」getModel會返回一個對象的引用,你想要觀察的缺點是你必須返回對象引用而不是屬性來保持鏈接。 –

+0

像http://jsfiddle.net/NhPEN/可以ilustrate我的觀點。非常簡單,沒有道理,但是可以說明如何使用函數來檢索對象並將其屬性用作模型,您可以使用其他函數來生成屬性名稱並使其完全動態 –

回答

3

是一個getter會去我的思維方式像

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

其中getModel會回到你要觀察的缺點是,你將不得不返回的對象,其屬性格式的對象的引用引用而不是保留鏈接的財產。

http://jsfiddle.net/NhPEN/這樣的東西可以說明我的觀點。非常簡單,沒有道理但演示如何使用函數來檢索對象並將其屬性用作模型,可以使用其他函數來生成屬性名稱並使其完全動態

+0

謝謝,這只是救了我! – znelson