首页 > 解决方案 > 为什么 $scope.value 仅在我们单击文本框和屏幕后才显示为预填充文本框,即使使用 Angular 的就绪功能

问题描述

我正在尝试在准备好的函数中使用 $scope.lastName="ThisIsLastname" 设置名为 lastName 的 ng-model 的值。我可以设置值,也可以设置它,因为我可以在控制台中看到,但问题是文本框本身没有出现值(文本框没有预填充)。仅当我单击文本框然后单击屏幕中的任何位置时,才会预填充文本框。

<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.
});

因此,当我重新加载页面时,我可以看到该值在调用就绪函数后打印在控制台上,但是我可以看到空文本框(姓氏的值未显示在文本框中)。

但是当我第一次单击那个空文本框,然后单击屏幕上的任意位置时,会出现文本框的值。我不明白是什么让它现在出现但在调用准备函数时没有出现。

我不需要替代解决方案,我想了解为什么会这样!

标签: javascripthtmljqueryangularjsdocument-ready

解决方案


.ready() 不是 angularjs 的一部分,而是 jqlite (jquery)。因此,即使您正在分配 $scope.value,您也已经开始了一个摘要循环来更新 dom。

您可以在分配 $scope.value 后添加 $scope.$apply() 以运行摘要循环。


推荐阅读