gpt4 book ai didi

javascript - 永远不会调用回调

转载 作者:行者123 更新时间:2023-11-30 17:13:59 25 4
gpt4 key购买 nike

我尽可能多地阅读了有关 $digest cycle 和 $scope.$apply() 的文章,但无法理解如何在回调中更改我的数据。

这是我的方法:

vm.showAllResults = showAllResults;

function showAllResults(){
// Prevent 'bubbling'
event.preventDefault();
event.stopPropagation();
// Second parameter notifies search to show full list of elements
vm.search(vm.input.query, true);
$scope.$apply(function(){
vm.showAll = false;
});
}

vm.search(vm.input.query, true) - 也在使用 vm.showAll 进行一些异步工作。 之后我想将其设置为false。

但我无法进入 $scope.$apply()。我究竟做错了什么?谢谢!

最佳答案

直接回答你的问题:我强烈怀疑你遇到了控制台错误:

$apply already in progress

这会导致 $apply 回调不运行。

也就是说,您可以使用 $timeout( cb ) 来解决这个问题而不是 $scope.$apply( cb )。如果你想使用它,一定要依赖注入(inject)它:

vm.showAllResults = showAllResults;

function showAllResults(){
// Prevent 'bubbling'
event.preventDefault();
event.stopPropagation();
// Second parameter notifies search to show full list of elements
vm.search(vm.input.query, true);
$timeout(function(){
vm.showAll = false;
});
}

然而,正如 Avraam 所指出的,在我看来,vm.search 应该是一个使用 $q 的延迟方法。 (也是依赖注入(inject))它返回一个 promise ,并调用 .resolve/reject,你可以像这样与 .then 一起使用:

vm.showAllResults = showAllResults;

function showAllResults(){
// Prevent 'bubbling'
event.preventDefault();
event.stopPropagation();
// Second parameter notifies search to show full list of elements
vm.search(vm.input.query, true)
.then( function() {
$timeout( function() { // <-- This $timeout probably not needed...
vm.showAll = false;
});
});
}

关于javascript - 永远不会调用回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26467946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com