我是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;
}
}
我第一次点击按钮没有任何反应,但是在第二次点击时输入值会更新。两次警报输出相同的值。
为什么它不会在第一次点击时绑定?
答案 0 :(得分:1)
您通过直接使用jQuery函数在AngularJS的世界之外进行HTTP调用。 所以angularJS不能单独刷新它的模板,基于在jquery ajax OnSuccess回调上完成的$ scope vars更新......
只有在第二次ng-click时才会查看其$ scope变量,以查看某些内容是否已更改(摘要周期)
因此,要纠正您的问题:停止使用jquery $.ajax
并使用$http或ngResource的角度内部机制($ http +更多功能)。这样,angular就会知道它必须在http success / fail