我有一个角度设置,它将设置一个变量的值,但不会放过它。我试图在对http的两个函数调用之间设置/重置$ scope变量的值。所以基本上:
$scope.submit = function() {
$http({
url:'http://localhost:3001/foo/api/v1/auth',
method: 'post',
data: JSON.stringify({email:$scope.user.email}),
headers: {'Content-type': 'application/json'}
}).success(function (data, status, headers, config) {
$scope.status = data.status;
}).error(function(data, status, headers, config) {
$scope.status = status + ' ' + headers;
}) ...etc...
然后当第一个完成时,html页面会相应地更改,然后我调用另一个函数:
$scope.thirdPage = function(user) {
var userStatus;
var goCode = JSON.stringify({email:$scope.user.email, securitycode:$scope.userCode});
$http({
url:'http://localhost:3001/foo/api/v1/auth',
method: 'post',
data: goCode,
headers: {'Content-type': 'application/json'}
}).success(function (data, status, headers, config) {
//neither of these work
$scope.status = data.status; //retains original value
$scope.userStatus = data.status; //will not pick up data.status
}).error(function(data, status, headers, config) {
$scope.status = status + ' ' + headers;
$log.warn("scopeErrorStatus: " + $scope.status);
})
Angular不允许我将$scope.status
的值从一个函数重新设置为下一个函数,并且不允许我将另一个变量设置为data.status
。认为问题是AJAX查询还没有完成我尝试使用$ watch(没有区别)和$ apply(抛出一个似乎与运行的Bootstrap代码有某种关系的错误)。已经将变量声明为函数的局部变量,全局等等。把我的头发拉出来。思考?
答案 0 :(得分:1)
这可能是由于原语在Angular中使用子范围的方式。我怀疑你已经在某处创建了一个子范围,并且你要更新的值已经被遮蔽了。
解决此问题的方法是将范围属性移动到对象。如:
$scope.model = {};
$scope.model.status = "ok";
有关此内容的更多信息:http://nathanleclaire.com/blog/2014/04/19/5-angularjs-antipatterns-and-pitfalls/
答案 1 :(得分:1)
调试的第一步应该是输出$scope.status
和data.status
的值。要查看该值是否确实未分配。
因此,您应该将相关行之前和之后的两个值记录到控制台,以查看最新情况。
console.log(data.status + "/" + $scope.status);
我无法想象作业失败了。因此,记录值以查看实际发生的情况。