如何从 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();
我有一个递增计数器的按钮。计数在 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();