gpt4 book ai didi

javascript - 使用 $timeout 强制执行,是一个不好的做法吗?

转载 作者:行者123 更新时间:2023-12-03 03:57:52 24 4
gpt4 key购买 nike

我正在使用 ionic 3。所以我在 Controller 上有这段代码并且它可以工作

$scope.note = 'Lorem...';

$rootScope.$on('Active',function() {
$timeout(function() {
$scope.note = 'test';
},0);
});

但是为什么这不起作用?

$scope.note = 'Lorem...';

$rootScope.$on('Active',function() {
$scope.note = 'test';
});

最好的方法是什么?

最佳答案

在这种情况下,这可以被认为是一种不好的做法。自发使用 $timeout 通常表明开发人员不知道代码是在摘要周期内部还是外部运行,并试图确保安全。

为什么这不起作用的解释超出了发布代码的范围,但原因是该代码在摘要之外运行。这取决于 Active 范围事件的触发位置,这是开发人员首先应该关心的,因为范围事件不一定发生在摘要周期内。

如果已知事件发生在摘要之外,则应使用 $apply 包装与摘要相关的代码:

$scope.$on('Active',function() {
$scope.$apply(function() {
$scope.note = 'test';
});
});

如果已知事件在摘要内部和外部发生,则应使用 $evalAsync 包装代码:

$scope.$on('Active',function() {
$scope.$evalAsync(function() {
$scope.note = 'test';
});
});

$timeout(...) 应该仅在需要其行为时使用,即一个或更多的滴答延迟和摘要。

正如 @georgeawg 所建议的,在 Controller 中使用 $rootScope 作为全局事件总线也是一种不好的做法(它们可以访问子作用域)。这基本上是一种可能导致内存泄漏的反模式。考虑到事件已被 $broadcast 编辑,它将传播到子范围。根据经验,它应该是 $scope.$on(...),除非有原因需要专门在 $rootScope 上完成。

关于javascript - 使用 $timeout 强制执行,是一个不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44855970/

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