Javascript 角度1更新选定对象的值

Javascript 角度1更新选定对象的值,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我希望这附近还有一些棱角分明的大师;) 说明 我通过Ajax加载了一些复选框。数字、名称和状态(选中/未选中)数据通过ajax加载 我也有许多选择(下拉列表)由复选框提供。例如,如果我选中“吉他”复选框,那么我的选择将具有“吉他”选项 问题 在我手动取消选中并再次选中其中一个复选框之前,选择不会显示任何选项 肮脏的解决方法 我发现了一个非常肮脏和不可靠的解决方法,即在几秒钟后调用$scope.$apply: setTimeout(function () { $scope.$apply(

我希望这附近还有一些棱角分明的大师;)

说明

我通过Ajax加载了一些复选框。数字、名称和状态(选中/未选中)数据通过ajax加载

我也有许多选择(下拉列表)由复选框提供。例如,如果我选中“吉他”复选框,那么我的选择将具有“吉他”选项

问题

在我手动取消选中并再次选中其中一个复选框之前,选择不会显示任何选项

肮脏的解决方法

我发现了一个非常肮脏和不可靠的解决方法,即在几秒钟后调用$scope.$apply:

setTimeout(function () {
    $scope.$apply(function () {
        $scope.table = {};

        if($scope.property.value.text) {
            $scope.table = JSON.parse($scope.property.value.text);

        }
        $scope.propertyChanged = function (property) {
            property.value = {
                text : JSON.stringify($scope.table)
            };
        }
    });
}, 2000)
我试图在ajax回调上调用$scope.$apply,但出现错误:
angular.js:10061错误:[$rootScope:inprog]$digest已在进行中。


您知道如何避免这种解决方法吗?

您是如何加载数据的?如果在复选框完全加载后加载表/下拉列表,这似乎可以解决。ajax/$http是异步的,所以使用承诺并使用
.then()
解决它们。所以它不是
$http
就是
$q
。如果您有多个异步服务器,请尝试
$q.all(promises)
,而不是将它们链接起来callback@ElmerDantas我不能推迟加载表,所有的markeup都已经在了page@AlekseySolovey是的,我真的知道ajax是异步的。正如我所说的,我还试图在回调中添加$scope.$apply,但是我得到了我报告的错误。我目前使用$http,并将$scope放入$apply中。如果您解决了您的承诺,则不需要$apply在我的then()中@DarkoRomanov well timeout和apply;您已经将变量绑定到范围。(语法不是只有
$scope.$apply()
,里面没有任何东西吗?)