我有时甚至非常随机地无法使用$ http调用中收到的数据。这样接收的数据将绑定到接收它的变量,但不会转移到另一个变量。例如,下面{{avariable}}显示在HTML页面中(它停止为空并显示来自服务器的数据)但{{anumber}}不会从0更改为新数据(即使我执行$ scope) .anumber = $ scope.avariable)。有时这个问题是通过在$ http调用本身中分配相等而不是稍后来解决的,但这次它也没有那样工作。我想这与消化,eval周期有关吗?我不一定了解它们或它们如何在这种情况下工作。但是,我确实在必要时使用$ timeout。
一切正在Rails /后端方面工作 - 我通过直接访问浏览器中的URL进行检查。当然,如前所述,{{avariable}}确实从null更改为服务器数据。
AngularJS代码:
myangularmodule.controller('appcontroller', function($rootScope, $scope, $filter, $location, $state, $timeout, $http) {
$scope.avariable = null;
$scope.anumber = 0;
$scope.ihappenwhenthatbuttonispressed {
$timeout(function(){
$http.get('/employees/getthisdata/' + value + '.json').success(function (data) {
$scope.avariable = data.avariable;
});
}, 5);
$scope.anumber = $scope.avariable;
};
});
我的HTML页面:
<html>
<head>
<%= stylesheet_link_tag "application" %>
<%= javascript_include_tag "application" %>
</head>
<body ng-app="myangularmodule">
<div ng-controller="appcontroller">
<button ng-click="ihappenwhenthatbuttonispressed(anumber)">
Click me
</button>
{{avariable}}
{{anumber}}
</div>
</body>
</html>
答案 0 :(得分:0)
这是因为Javascript中的AJAX调用是异步的。您正在调用http请求,然后立即设置$scope.anumber = $scope.avariable
而不是等待http响应。因此,当您第一次单击该按钮时,您实际上是在设置$scope.anumber = null
。收到http响应后,$scope.avariable
被设置为data.variable
,然后退出该功能。
如果你想更新两者,你需要这样的东西:
$http.get('/employees/getthisdata/' + value + '.json').success(function (data) {
$scope.avariable = data.avariable;
updateANumber();
});
function updateANumber(){
$scope.anumber = $scope.avariable;
}
答案 1 :(得分:0)
你也可以这样做:
$http.get('/employees/getthisdata/' + value + '.json').success(function (data) {
$scope.avariable = data.avariable;
$scope.anumber = $scope.avariable;
});
不需要超时部分。