只是想了解为什么在这种情况下我需要使用 $scope.$apply ?根据我读到的有关该主题的所有信息,我不应该这样做,因为一切都在 Angular 内部发生?我错过了什么?

在我的 Controller 中:

$scope.savePreset = function(columns, $event){
  $event.preventDefault();
  preset.name = prompt("Please enter preset name", "My Preset");
  if (preset.name != null) {
    preset.columns = $scope.columns;
    $scope.presets[preset.name] = preset; // (Object)
    // Without $scope.$apply() here, view isn't updated. Why?
    alert('Your preset "' + preset.name + '" has been saved.');
    $scope.loadPreset(preset.name);
  } else {
    alert('Please enter a valid name.');
  }
}

( savePreset 函数在 ng-click 指令中调用,并且 preset in presets 有一个 ng-repeat ,它没有更新)。

谢谢,
皮姆

最佳答案

正如评论@Sergiu Paraschiv 中提到的,使用包装在 window 中的函数正在停止 angular $digest 循环,这就是为什么我的建议是使用 $window provider 和 $window.prompt 和 $window.alert 函数,我认为它们会起作用

here is a example

关于javascript - 为什么在这种特殊情况下 View 没有更新? ($scope.$apply),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26527703/

10-09 22:01