私がやろうとしていることは、おそらく良い習慣とは見なされていないということから始めましょう。ただし、小さな増分ステップで大規模な Web アプリを AngularJs に移行するには、このようなことを行う必要があります。
やってみた
$scope.$watch(function () { return myVar; }, function (n, old) {
alert(n + ' ' + old);
});
myVar はグローバル変数です (ウィンドウで定義)
そして、コンソールから myVar を変更します。ただし、ウォッチャーを最初にセットアップするときにのみ起動します。
コントローラー内から myVar を更新すると機能します ( http://jsfiddle.net/rasmusvhansen/vsDXz/3/を参照してください。ただし、レガシー JavaScript から更新された場合は機能しません)。
これを達成する方法はありますか?
更新 レガシーコードが完全に立ち入り禁止の場合、アンダースの答えが好きです。ただし、現時点では、機能しているように見え、毎秒起動するタイマーが含まれていないこのアプローチを見ています。
// In legacy code when changing stuff
$('.angular-component').each(function () {
$(this).scope().$broadcast('changed');
});
// In angular
$scope.$on('changed', function () {
$scope.reactToChange();
});
私は別のソリューションを使用しますが、Anders のソリューションは記載されている問題を正しく解決しているため、Anders にポイントを与えます。