javascript - 为什么我们将函数参数传递给 $scope.$apply

标签 javascript angularjs angularjs-scope

当我开始阅读 $digest 和 $apply 时,我清楚地理解了两者。

但是当我开始探索 $apply 时,我写了下面的代码

$scope.$apply(function(){
     $scope.isLoggedIn = true;
});

在 $scope.$apply 功能中传递函数参数需要什么?任何方法 $scope.$apply 都会调用 $rootscope.$digest ,它会触发所有观察者,并且值将更新到 View 。那么为什么我们要在 $apply 函数中传递函数参数。

最佳答案

假设您已经知道 when to use $scope.$apply ,看看 $apply docs 中的伪代码:

function $apply(expr) {
  try {
    return $eval(expr);
  } catch (e) {
    $exceptionHandler(e);
  } finally {
    $root.$digest();
  }
}

如果您将函数传递给 $apply,那么它会简单地转发到 $eval .

eval 的文档表明我们可以传递字符串或函数。

  • string: execute using the rules as defined in expression.
  • function(scope): execute the function with the current scope parameter.

就您而言,您正在传递一个函数。该函数仅使用当前作用域作为第一个参数进行评估。

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

因此,简而言之:可以使用函数参数调用 $apply,该函数参数将在作用域摘要开始之前安全地求值。

关于javascript - 为什么我们将函数参数传递给 $scope.$apply,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33798337/

相关文章:

javascript - 使用 JavaScript 更改使用 <button> 文本创建的按钮

javascript - 如何在 JavaScript 中停止一次又一次调用同一个函数?

javascript - 在简单的指令示例中嵌入用法

angularjs - Angular Controller As Syntax-no 方法 '$watchCollection'

angularjs $watchGroup 与 Controller 作为语法

javascript - 显示隐藏元素后将 $scope ng-click 事件应用于隐藏元素

javascript - 如何根据元素自身的值设置伪元素的样式?

javascript - 使用 $http.get() 或 $http.post() 通过请求传递 JSON 数据

angularjs - 检查 null、empty 或 undefined angularjs

javascript - SlickGrid 无法从返回 JSON 的 Ajax 调用中正确填充