如何从 angular 之外发起 $apply

How to initiate an $apply from outside of angular

我有一个递增计数器的按钮。计数在 Angular 世界中显示,而按钮在 Angular 世界之外。我可以通过使它成为全球性的(是的,丑陋的)来获得 angular 世界的价值,但是我如何获得一些 Angular 代码来使用 $apply 来更新它的 $digest 循环? (基于那个点击事件)

顺便说一句:我知道我可以使用 ng-click 将点击事件带入 Angular,但出于好奇,我想知道如何在不这样做的情况下解决这个问题。

这是原话: https://plnkr.co/edit/UTElTmggj3ae2c19bsL1?p=preview

var gCounter = 0;

$(function() {

$('#btn').on('click', function() {
  console.log('click!')
  gCounter++;
})

});


(function() {

  var app = angular.module('app', []);
  var ctrl = app.controller('ctrl', Ctrl);


  function Ctrl($scope) {

    $scope.$watch(function() {
      return gCounter
    }, function(newVal, oldVal) {
      $scope.counter = newVal;
    });

  }

}

 }());

您可以获得与点击按钮关联的范围,然后使用

调用$apply()
$(this).scope().$apply();