2015-09-04 1 views
0

В ng-модели я хочу установить значение по умолчанию, определенное в моей области видимости, но значение не распознается.Угловая: введите в ng-модель значение, заданное в области

Вот мой контроллер:

$scope.defaultRole = "Admin"; 

Мое мнение:

<input type="text" 
class="form-control" ng-model="user.role='{{defaultRole}}'"> 

, но у меня есть {{}} defaultRole вместо Администратор в мой ввод текста. Может быть, это проблема формирования, но я не знаю, как заставить ее работать.

Примечание: я могу установить ng-model = "user.role = 'Admin'", но я хочу его из области.

Благодарим за помощь!

ответ

1

Вы не понимаете, как работает ngModel. ngModel ожидает назначаемое угловое выражение. Выражение связано двумя способами. Это означает, что

  • для заполнения поля ввода, угловое вычисляет выражение
  • , когда значение, введенное в изменении поля ввода, переменная, что выражение ngModel относится к устанавливается равным введенному значению

Таким образом, все, что вам нужно, это

<input type="text" class="form-control" ng-model="defaultRole"> 

это будет читать переменную defaultRole и заполнить поле со значением, и наоборот.

Если вы хотите, вместо того, чтобы заполнить user.role с введенным значением, и поле, чтобы иметь значение defaultRole по умолчанию, то он должен быть

<input type="text" class="form-control" ng-model="user.role"> 

и контроллер должен сделать

$scope.user.role = $scope.defaultRole; 

или, если пользователь не существует еще

$scope.user = { 
    role: $scope.defaultRole 
}; 

Инициализировать ialize user.role до значения по умолчанию.

0

Вы можете сделать это, используя ng-init. ng-model не должен иметь дело с аффектацией. Это будет сделано непосредственно угловым.

<input type="text" class="form-control" ng-model="user.role" ng-init="user.role = defaultRole"> 

Working Fiddle

+1

Это [не является подходящим использование ngInit] (https://docs.angularjs.org/api/ng/directive/ngInit). «Единственное подходящее использование' ngInit' - для специальных свойств псевдонимов 'ngRepeat'. Хотя это * может * работать, 'ngInit' является директивой с приоритетом, что означает, что она не гарантирует выполнение в том порядке, в котором вы можете ожидать. Возможно, что значение может быть 'undefined', потому что' ngInit' еще не обработано. ** только ** подходящий способ инициализации переменных - с контроллером. – Claies

+0

Hi Pierre-Alexandre. Спасибо за короткий и легкий ответ, который работает. Мне просто пришлось удалить {{}}.Я понял, что ngModel также касается аффектации, но я последую вашим советам и вместо этого использую ng-init. – user708683

+0

Теперь я хочу получить значения, выбранные в моем раскрывающемся списке 2, объединить их с разделителем «-», а затем установить их в ng-init. Я могу получить выбранные значения, но как их конкатенировать? Я пробовал что-то вроде этого: ng-init = "user.role = defaultRole - name_selected - adress_selected", но он не работает. У вас есть идея, как? Спасибо – user708683

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