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