Pracuję ze stroną z AngularJS i muszę wyświetlić zegar działający w polu tekstowym wejściowym tylko do odczytu (dwukierunkowo związany z data-ng-model)
.Aby zasymulować działający zegar, Używam harmonogramu JavaScript z setTimeout
do wywoływania funkcji co 1000 milisekund, co aktualizuje wartość właściwości $ scope'd, która z kolei jest powiązana z tym wejściowym polem tekstowym. W jakiś sposób wartość w polu wejściowym nie jest aktualizowana. umieścił znacznik <pre />
i zaktualizował jego zawartość przy użyciu selektora jQuery.To działa dobrze, więc potrzebuję pomocy w otrzymywaniu wartości pola tekstowego wejściowego, aby również aktualizować się co sekundęPole wejściowe AngularJS nie aktualizuje się z setTimeout wewnątrz kontrolera
Dla tego przykładu ustawiłem jsFiddle.
HTML jest poniżej:
<body data-ng-app="formApp">
<div data-ng-controller="FormCtrl">
Current Date and Time <input type="text" data-ng-model="formData.currentDateTime" readonly="readonly" size="60" />
</div>
<pre id="currentDateTime" style="font-size:1.5em;">
</pre>
</body>
W angularjs moduł aplikacji i kontroler są zadeklarowane w następujący sposób:
(function() {
var formApp = angular.module("formApp", []);
formApp.controller("FormCtrl", function ($scope) {
$scope.formData = {};
$scope.formData.currentDateTime = new Date().toString();
(function updateCDT() {
$scope.formData.currentDateTime = new Date().toString();
document.getElementById("currentDateTime").innerHTML = $scope.formData.currentDateTime;
setTimeout(updateCDT, 1000);
})();
});
})();
Poszedłem z wtryskiem '$ timeout' do kontrolera i użyłem go, ponieważ wygląda na czystszy ** i **, ponieważ narzędzia dla programistów Chrome pokazują błąd' Błąd: [$ rootScope: inprog] $ apply already in progress' when używając '$ scope. $ apply();'. Dzięki za natychmiastową pomoc! –
@WebUser zaktualizowany, teraz nie dostaniesz tego błędu. –