Как установить значение по умолчанию для второй текстовой области B, посредством чего значение по умолчанию получается из первой текстовой области A с использованием углового - PullRequest
0 голосов
/ 08 июня 2019

У меня есть два поля textareas.

Как только пользователь заполнил первую текстовую область «A», вторая текстовая область «B» должна быть получена как значение по умолчанию, значение из самой текстовой области «A».Однако пользователь имеет возможность редактировать значение textarea B в режиме редактирования.Вторая текстовая область «B» не отображается по умолчанию, существует метка B, которая представляет значение текстовой области A первой, только когда при действии редактирования появляется текстовая область B, посредством чего пользователь может добавить изменение своего собственного значения.Невозможно установить значение по умолчанию для второго текстового поля B, поскольку оно пустое.Во-вторых, если пользователь не редактирует, он должен иметь возможность сохранить значение метки B в качестве значения по умолчанию для textarea B

TEXTAREA "A"
<textarea id="@Model.Id" class="order-message" rows="2" cols="20"
          ng-model="message" order-message ng-maxlength="380">
</textarea>

LABEL B 
<p ng-show="showDescriptionLabel">{{archiveMetadescription}}</p>

<a ng-click="editDescription(message)"  class="edit-btn needsclick">
  <i class="fa fa-edit"></i>
</a>

TEXTAREA "B"
<textarea ng-show="!showDescriptionLabel" id="@Model.Id"
          ng-init="archiveMetadescription= {{message}}"
          class="metadescription" rows="2" cols="20"
          ng-model="archiveMetadescription"  >
</textarea>


В моем контроллере я попытался установить для textarea B значение textarea Aв моей функции инициализации

 $scope.archiveMetadescription = angular.copy($scope.message);


$scope.editDescriptiom = function (val) {
    $scope.archiveMetadescription = angular.copy(val);
    $scope.showDescriptionLabel = false;
}

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

Ответы [ 2 ]

0 голосов
/ 09 июня 2019

@ georgeawg большое спасибо за помощь и ответ. наконец-то я посмотрел на $ scope.message, теперь он работает, я могу сохранить archiveMetadescription, даже если пользователь изменяет или не изменяет метку B.

In my controller
$scope.$watch(
          function () { return $scope.message },
           function (newValue, oldValue) {

              $scope.archiveMetadescription = $scope.message;
          }, true);

        $scope.editDescription = function (val) {
            $scope.archiveMetadescription = val;
            $scope.showDescriptionLabel = false;
        }

In my view  
LABEL B
<p ng-show="showDescriptionLabel">{{archiveMetadescription }}</p>
<text><a ng-click="editDescription(archiveMetadescription )" class="edit-btn needsclick"><i class="fa fa-edit"></i></a></text>

TEXTAREA B
<textarea ng-show="!showDescriptionLabel" id="@Model.Id"
          class="metadescription" rows="2" cols="20"
          ng-model="archiveMetadescription"  >
</textarea>



TEXTAREA "A"
<textarea id="@Model.Id" class="order-message" rows="2" cols="20"
          ng-model="message" order-message ng-maxlength="380">
</textarea>
0 голосов
/ 08 июня 2019

Не используйте ng-init.Это однократная операция, которая происходит, только когда платформа AngularJS компилирует элемент:

TEXTAREA "B"

<textarea ng-show="!showDescriptionLabel" id="@Model.Id"
          ̶n̶g̶-̶i̶n̶i̶t̶=̶"̶a̶r̶c̶h̶i̶v̶e̶M̶e̶t̶a̶d̶e̶s̶c̶r̶i̶p̶t̶i̶o̶n̶=̶ ̶{̶{̶m̶e̶s̶s̶a̶g̶e̶}̶}̶"̶
          class="metadescription" rows="2" cols="20"
          ng-model="archiveMetadescription"  >
</textarea>

Не использовать angular.copy со строковыми примитивами:

$scope.editDescription = function (val) {
    ̶$̶s̶c̶o̶p̶e̶.̶a̶r̶c̶h̶i̶v̶e̶M̶e̶t̶a̶d̶e̶s̶c̶r̶i̶p̶t̶i̶o̶n̶ ̶=̶ ̶a̶n̶g̶u̶l̶a̶r̶.̶c̶o̶p̶y̶(̶v̶a̶l̶)̶;̶
    $scope.archiveMetadescription = val;
    $scope.showDescriptionLabel = false;
}
...