Программно установить значение поля ввода в angularjs

#angularjs

#angularjs

Вопрос:

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

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

 $("#"   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>
  

Кстати, это делается в директиве. Есть какие-либо указания на то, как заставить это работать?
Я пытался вызвать scope.$apply и scope.$ digest после установки значения ввода, но безрезультатно. И если я не должен использовать jQuery, каков угловой способ установки значения?
Спасибо

Комментарии:

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

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

Ответ №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);
  

Комментарии:

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

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