获取请求后无法更改$ scope的值

时间:2017-04-21 11:04:44

标签: angularjs angularjs-scope

我正在寻找下面的可能解决方案,我有一个具有指定观察者的阵列。我的问题是在收到来自http get请求的响应后更改$ scope。 $ scope总是未定义的,我需要实时更改那里的值。任何建议将不胜感激!

$scope.$watch('user.tags', function (newVal, oldVal) {to invalid until the
    $scope.tags_valid = true;

    // Loop through array and validate length
    for (var i = 0; i < $scope.user.tags.length; i++) {
        if ($scope.user.tags[i].data.length != 24) {
            $scope.tags_valid = false;
            return;
        }

        // Check if already exists
        $http.get("api/registration/TagExists", { params: { Tag_Id: $scope.user.tags[i].data } }).success(function (response) {
            if (response == "true") {
                // $scope is always undefined here
                $scope.user.tags[i].is_valid = false;
                $scope.tags_valid = false;
            } else if (response == "false") {
                // $scope is always undefined here
                $scope.user.tags[i].is_valid = true;
            }
        });
    }
}, true);

1 个答案:

答案 0 :(得分:1)

实际上未定义的是[i]处的用户标签。 由于变量的函数范围,i将等于服务器响应到达之前数组的长度。

您可以将服务器调用包装在一个接受索引或实际标记作为参数的函数中。与您拨打电话的checkTag(tag)一样。

示例代码:

function checkTag(tag) {
    $http.get("api/registration/TagExists", { params: { Tag_Id: tag.data } }).success(function (response) {
        if (response == "true") {                
            tag.is_valid = false;
            $scope.tags_valid = false;
        } else if (response == "false") {                
            tag.is_valid = true;
        }
    });
}