У меня есть два входа с другой моделью, один из которых может меняться и обновляться. Я хочу, чтобы другой вход имел значение сохранения как первое. Я не хочу использовать $ 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 не выполняет свою работу, если первая меняет какую-то функцию внутри контроллера. Я высоко ценю любой трюк или решение.
Я не уверен, правильно ли понимаю ваш вопрос, если вы просто хотите иметь дублированный дисплей, вы можете просто привязать его к той же модели.
Однако, если вы хотите, чтобы A повлиял на B без функции, в то время как B все еще может иметь свою собственную переменную, не возвращаясь к A, оберните элемент, который B привязан в директиве, и передайте A в директиву, а внутри директивы определите параметр scope как только для чтения и назначить его B, поэтому A изменит B, пока B все еще может внести изменения, не повредив A.
Смотрите этот код, который вам поможет. Я думаю, что 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
Из вашего вопроса:
Изменение ng не работает, если входное значение первого ввода не изменяется, введя внутри первого поля ввода. Когда data.first_modelis обновляется внутри контроллера, ngChange не выполняет свою работу.
Это проблема. нг-изменение делает его работу.
Из документов:
ngChange: Оцените данное выражение, когда пользователь меняет ввод.
ngChange запускается только при изменении пользователем ввода в представлении. ngChnage не будет срабатывать, если модель изменена вне представления, например, в контроллере, независимо от того, привязана ли модель к входу.
Если вы меняете значение своей первой модели за пределами представления, то единственным вариантом является обновление значения второй модели и за пределами представления.
Вам нужно будет изменить архитектуру того, как вы пытаетесь выполнить то, что вы пытаетесь выполнить. Если вы разместите полный код, мы сможем помочь.