Я совершенно новый для AngularJS, и я пытаюсь реализовать простую привязку.
У меня есть html, как это (упрощенный):
<html ng-app>
<div id="divController" ng-controller="myCtrl">
<input type="button" ng-click="GetNumbers();" />
<input type="text" value="{{numbers.Total}}" />
</div>
</div>
и контроллер следующим образом:
function myCtrl($scope) {
$scope.numbers = new Object();
$scope.GetNumbers = function() {
$.ajax({
type: "POST",
url: "page.aspx/GetCurrentNumbers",
data: '{name: "test"}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnSuccess,
failure: function (response) {
alert(response.d);
}
});
}
function OnSuccess(response) {
var returnValue = JSON.parse(response.d);
alert(returnValue.Total);
$scope.numbers = returnValue;
}
}
В первый раз, когда я нажимаю кнопку, ничего не происходит, однако при втором щелчке обновляется входное значение. Оба раза предупреждают о выходе того же значения.
Почему он не привязывается при первом нажатии?
Вы вызываете HTTP-вызов вне мира AngularJS, используя непосредственно функцию jQuery. Таким образом, angularJS не может обновить только свой шаблон, основанный на обновлениях облаков $ scope, выполненных на обратном вызове jquery ajax OnSuccess...
это только при выполнении второго ng-click, что угловой взгляд на его переменные $ scope, чтобы увидеть, что-то изменилось (цикл дайджеста)
Итак, чтобы исправить вашу проблему: прекратите использование jquery $.ajax
и используйте угловые внутренние механизмы $ http или ngResource ($ http + more features). Таким образом, угловой будет знать, что он должен обновлять шаблоны при успешном/неудачном http