2015-05-01 71 views
2

我有一個場景,其中ng-model屬性應該綁定到來自數據庫的作爲業務邏輯一部分的值。將ngModel綁定到表達式的值

爲了簡單起見,我已經創建這個example

function TodoCtrl($scope) { 
    $scope.field1 = "PropertyFromDB"; 
    $scope.PropertyFromDB = "hello world"; 
} 

<div ng-app> 
    <h2>ngModel BINDING EXAMPLE</h2><br/> 
    <div ng-controller="TodoCtrl"> 
     <div ng-init="imod = field1"> 
      <input type="text" ng-model="imod"></input> 
     </div> 
    </div> 
</div> 

在這個例子中,field1是這將是來自DB(即PropertyFromDB)和NG-模型應綁定到PropertyFromDB代替FIELD1屬性的值。 因此,它就像我想評估ng模型的表達式語法中的表達式,但我無法這樣做。

感謝

回答

3

可以指當前範圍與this並閱讀其屬性,如:

<div ng-init="imod = field1"> 
    <input type="text" ng-model="this[imod]"></input> 
</div> 

但創建視圖模型是非常不尋常和不方便的方法。

我建議創建一個更好的結構/包含字段/值組合的對象,並在該範圍上設置該對象,而不是單獨設置字段和值的範圍。

+0

謝謝。這就是我一直在尋找的東西。上面的例子是我的實際實現的剝離版本,所以字段和值分別在範圍上。基本上我試圖完成這樣的事情: - 但ng-model不允許,表達式的值通過所以我有采取ng-init路由。如果有更好的方法來實現這一點,請讓我知道。再一次感謝你。 – miztaken

+0

@miztaken,你根本不需要'ng-init' - 可以用'this [field1]'完成。但是,爲什麼需要在範圍上設置正確的值,而不是創建一個對象(由@pankajparkar建議)(http://stackoverflow.com/a/29996113/968155)?如果你必須,爲什麼它的價值名稱本身取決於'field1'的值 - 爲什麼不靜態調用'value1'? –

+0

是的,你是對的。爲了演示目的,我保留了範圍。我的業務邏輯決定了ngModel應該映射到哪個字段,例如,我已經在範圍級別編碼它,這就是我不能保持靜態的原因。感謝您的幫助。這是我將如何使用它http://jsfiddle.net/miztaken/ns0utq9b/ – miztaken

1

你根本無法通過任何表情設定的ng-model值。另一種方法是更改​​從服務器返回的JSON結構。

標記

<div ng-controller="TodoCtrl"> 
    <div ng-repeat="field in properties"> 
     <label>{{field.property}}</label> 
     <input type="text" ng-model="field.value" /> 
    </div>{{properties}} 
</div> 

代碼

function TodoCtrl($scope) { 

    $scope.properties = [{ 
     property: 'PropertyFromDB', 
     value: "hello world" 
    }, { 
     property: 'PropertyFromDB1', 
     value: "hello world1" 
    }] 
} 

Fiddle Here

+1

嗨Pankaj,謝謝你的回覆。我認爲這是行不通的,因爲在你的示例中ng模型仍然直接綁定到field.value而不是field.value指向的屬性。我希望ng-model綁定到由Property1的值指出的PropertyFromDB。所以,基本上我試圖做這樣的事情: - miztaken