2016-10-19 24 views
1

У меня есть требование предварительно заполнить поле ввода значением другого поля ввода. Таким образом, как только первое поле теряет фокус, второе поле получает одно и то же значение. Поле доступно для редактирования, но изначально оно имеет значение первого поля. Я обнаружил, что ngModel второго поля не обновляется.Программно установить значение поля ввода в angularjs

Я делаю это, чтобы установить значение второго поля:

$("#" + fieldId).val(newstring); 

Вот HTML для первого поля:

<td class="formLabel" vAlign="top" align="left"> 
           <input validate-date-time val-type="date" val-start="true" val-end-id="endDate" id="startdate" size="10" max="10" width="20" ng-model="newEvent.startDate"> 
           mm/dd/yyyy 
          </td> 

Вот HTML для второго поля:

<td class="formLabel" vAlign="top" align="left"> 
           <input size="10" validate-date-time val-type="date" id="endDate" max="10" width="20" ng-model="newEvent.endDate"> 
           mm/dd/yyyy 
          </td> 

Это сделано, кстати, в директиве. Любые указатели на то, как сделать эту работу? Я попытался вызвать область действия $ apply и scope. $ Digest после установки входного val безрезультатно. И если я не должен использовать jQuery, то какой угловой способ установить значение? Благодаря

+0

Почему вы используете JQuery для этого? Можете ли вы показать нам, как выглядит ваш HTML-код? – Makoto

+0

Обычно вы не используете jquery в угловом приложении (кроме как в функции директивной ссылки или что-то еще). Вам нужно будет показать, что вы пробовали до сих пор, а также некоторый пример кода до того, как это проголосовало и \ или закрыто. –

ответ

1

попробовать что-то вроде этого:

// in the controller, add 
$scope.isStartDateInitialized = false; 
$scope.onStartDateSet = function() { 
    if (!$scope.isStartDateInitialized) { 
     $scope.isStartDateInitialized = true; 
     $scope.newEvent.endDate = $scope.newEvent.startDate; 
    } 
}; 

<!-- add the following attribute to the start date input --> 
<input ... ng-blur="onStartDateSet()" /> 

ПРИМЕЧАНИЕ 1: В приведенном выше коде предполагается, что вы хотите только программно обновить дату окончания самого первого времени дата начала устанавливается. Если вы хотите, чтобы он всегда был установлен на дату начала, когда дата начала изменяется, вы можете использовать ng-change вместо ng-blur.

Примечание 2: Вы должны удалить следующий JQuery код, который вы упомянули:

$("#" + fieldId).val(newstring); 
+0

Спасибо большое! Это работает. – Lazloman

+0

@GPicazo, если вы не возражаете ответить на вопрос newb для меня о своем коде, я был бы очень благодарен. Я новичок в JS, Angular и jQuery, поэтому я многому учусь. Мне любопытно, являются ли 'isStartDateInitialized' и' onStartDateSet' эти самонастраиваемые имена функций или они встроены в библиотечные функции в библиотеке Angular? –

+0

@ dalelandry - свойство и метод, о которых вы упомянули, являются настраиваемыми и специфичными для создаваемого приложения. Объект $ scope (и понятие) специфичен для Angular, но приложенные к нему методы специфичны для этого Углового приложения. Так, например, если вы и я создаем совершенно разные Угловые приложения, мы оба будем иметь дело с $ scope (s), прямо или косвенно. Однако свойства и методы, которые привязаны к этой области действия, скорее всего, будут разными. – GPicazo