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 это значение, которое будет свойство, которое приходит из БД (т.е. PropertyFromDB) и нг-модели должны связываться с PropertyFromDB вместо field1 , Итак, как будто я хочу оценить выражение внутри синтаксиса выражения ng-model, но я не могу этого сделать.

Благодаря

ответ

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, которую вы вернули с сервера.

Markup

<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

Привет, Панкай, благодарю вас за ответ. Я думаю, что это не сработает, потому что в вашем примере ng-model по-прежнему напрямую привязана к field.value, а не к свойству, указанному field.value. Я хочу, чтобы ng-model привязывалась к свойству, указанному значением поля1, которое является PropertyFromDB. Итак, в основном я пытаюсь сделать что-то вроде этого: - miztaken

Смежные вопросы