Обновление одного ввода путем изменения другого ввода в angularJS, но непосредственно внутри HTML

0

У меня есть два входа с другой моделью, один из которых может меняться и обновляться. Я хочу, чтобы другой вход имел значение сохранения как первое. Я не хочу использовать $ watch. Я использую ng-change для первого

это первый вход:

<input type="text" placeholder="input one" class="form-control" ng-change='second_model=data.first_model' ng-model="data.first_model" required>

И это второй вход:

<input type="text" placeholder="input two" class="form-control" ng-model="second_model"  disabled required>

Изменение ng не работает, если входное значение первого ввода не изменяется, введя внутри первого поля ввода. Когда data.first_model обновляется внутри контроллера, ng-change не выполняет свою работу.

Я знаю, что решение, чтобы заставить второго получить значение от первого, использует $watch так:

$scope.$watch('data.first_model', function(v){
      $scope.second_model =v;
   });

Но у меня есть ограничение, что я не могу вызвать функцию внутри контроллеров. Я хочу обработать ее прямо внутри html-кода, как вы видите, я сделал это так:

ng-change='second_model=data.first_model'

Но ng-change не выполняет свою работу, если первая меняет какую-то функцию внутри контроллера. Я высоко ценю любой трюк или решение.

  • 0
    Если вы не можете вызвать функцию из контроллера, используйте директиву. Единственный способ, которым я знаю, делать то, что вы хотите, - это использовать наблюдателя.

3 ответа

0

Я не уверен, правильно ли понимаю ваш вопрос, если вы просто хотите иметь дублированный дисплей, вы можете просто привязать его к той же модели.

Однако, если вы хотите, чтобы A повлиял на B без функции, в то время как B все еще может иметь свою собственную переменную, не возвращаясь к A, оберните элемент, который B привязан в директиве, и передайте A в директиву, а внутри директивы определите параметр scope как только для чтения и назначить его B, поэтому A изменит B, пока B все еще может внести изменения, не повредив A.

0

Смотрите этот код, который вам поможет. Я думаю, что ng-change не требуется для вашего сценария.

HTML:

 <input type="text" placeholder="input one" class="form-control" ng-model="data.first_model" required>
    <input type="text" placeholder="input two" class="form-control" ng-model="data.first_model"  disabled required>

app.js (контроллер):

app.controller('MainCtrl', function($scope) {
  $scope.data={};
  $scope.data.first_model="Kumar";
});

для просмотра см. ссылку plunker: https://plnkr.co/edit/H0yFffJG3EqpDipbqhX7?p=preview

0

Из вашего вопроса:

Изменение ng не работает, если входное значение первого ввода не изменяется, введя внутри первого поля ввода. Когда data.first_modelis обновляется внутри контроллера, ngChange не выполняет свою работу.

Это проблема. нг-изменение делает его работу.

Из документов:

ngChange: Оцените данное выражение, когда пользователь меняет ввод.

ngChange запускается только при изменении пользователем ввода в представлении. ngChnage не будет срабатывать, если модель изменена вне представления, например, в контроллере, независимо от того, привязана ли модель к входу.

Если вы меняете значение своей первой модели за пределами представления, то единственным вариантом является обновление значения второй модели и за пределами представления.

Вам нужно будет изменить архитектуру того, как вы пытаетесь выполнить то, что вы пытаетесь выполнить. Если вы разместите полный код, мы сможем помочь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню