Почему $ scope.value отображается только как предварительно заполненное текстовое поле после того, как мы щелкаем текстовое поле и экран, даже используя функцию готовности angular - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь установить значение ng-модели с именем lastName, используя $ scope.lastName = "ThisIsLastname" в готовой функции. Я могу установить значение, его также можно установить, поскольку я вижу это в консоли, но проблема в том, что значение не отображается в самом текстовом поле (текстовое поле не заполняется предварительно). Текстовое поле предварительно заполняется, только если я нажимаю на текстовое поле, а затем в любом месте экрана.

<input type="text" ng-model="lastName" /> <!-- this textbox should be prefilled when screen load using ng-model only -->


angular.element(document).ready(function () {
    console.log("is ready now");
    $scope.lastName="ThisIsLastname"; //set value
    console.log($scope.lastName); // I can see that value has been set successfully.
});

поэтому, когда я перезагружаю страницу, я вижу, что это значение печатается на консоли после вызова функции готовности, но я вижу пустое текстовое поле (значение фамилии не отображается в текстовом поле).

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

Мне не нужно альтернативное решение, я хочу узнать, почему это происходит!

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

In angularjs, angular.element - это jqLite объект


Оберните код обнуленным $timeout, чтобы запустить цикл дайджеста:

console.log("is ready now");

$timeout(function(){      
  $scope.lastName="ThisIsLastname";    
}); 

console.log($scope.lastName); 
0 голосов
/ 27 мая 2020

.ready () не является частью angularjs, а является jqlite (jquery). Итак, даже если вы назначаете $ scope.value, у вас есть запуск цикла дайджеста для обновления dom.

Вы можете добавить $ scope. $ Apply () после того, как назначите $ scope.value для запуска цикла дайджеста.

...