2013-07-14 171 views
4

注:我是很新的angularjsAngularjs動態指令

什麼是最好的解決辦法/做法: 我有一個數組或類型的值,對於每種類型應該有不同的輸入(模板和輸入驗證)?

E.g.和簡化

var vars = [ 
    { 
     type: 'int', 
     value: 42, 
     min: 0, 
     max: 42 
    }, 
    { 
     type: 'text', 
     value: 'foobar' 
    }, 
] 

爲 '詮釋' 模板將

<input type="range" max="{{max}}" min="{{min}}" value="{{value}}" /> 

和 '文'

<textarea>{{value}}</textarea> 

在現實情況下,會有相當多的輸入怪異接口

回答

6

一個ng-switchdocs)可以幫助你在這裏;是這樣的:

<div ng-repeat="item in items"> 
    <div ng-switch on="item.type"> 
    <div ng-switch-when="int"> 
     <input type="range" max="{{item.max}}" min="{{item.min}}" 
     ng-model="item.value" /> 
    </div> 

    <div ng-switch-when="text"> 
     <textarea ng-model="item.value"></textarea> 
    </div> 
    </div> 
</div> 

[更新]

既然你提到要動態包括基於類型的模板,看看ng-includedocs)這需要一個角度表達評估到一個URL:

​​

如果你不喜歡內聯字符串連接,你可以使用控制器方法生成網址:

<div ng-repeat="item in items"> 
    <div ng-include="templatePathForItem(item)"></div> 
</div> 

ngInclude文檔頁面上的示例非常好。

請注意,包含的模板將被賦予當前範圍的原型子範圍。

+0

林尋找一個動態的方式。像「包含輸入 - {{type}} - 模板」 – Viller

+0

@Viller足夠,答案更新。 –

+0

@BrandonTilley關於將邏輯放入指令(例如http://onehungrymind.com/angularjs-dynamic-templates/)的想法?我猜ng-switch似乎對我來說更加模塊化,但它也使dom變得混亂。我想這歸結於你更舒適的混亂,dom或指令? – bennlich