我想发射所有$ watch / $ observe侦听器,即使观察/观察值没有变化。通过这种方式,我可以提供仅仅测试"无需用户交互即可刷新当前页面/视图的功能。我曾尝试拨打$ apply / $ digest,但这并没有奏效:
$timeout(function(){
$scope.$apply();
});
$timeout(function(){
$scope.$digest();
});
还有其他办法吗?
最诚挚的问候,
答案 0 :(得分:1)
执行$scope.$apply()
将触发摘要周期,因为它在内部调用$digest
,下面是手动更改的示例。
number
变量不会受到约束,因为超时会使其超出角度范围。
setTimeout(function () {
$scope.number = Math.random();
});
然而,您可以通过手动应用范围更改来“强制”显示它:
setInterval(function () {
$scope.$apply();
}, 100);
<强>演示:强> No change / Change with manual updates
但这不会触发观察者。从$digest
实现开始,它会检查自上次手表评估后值是否已更改,并且只有在执行回调时才会运行回调。
if((value = watch.get(current))!==(last = watch.last)... [rootScope.js]
因此,您需要以某种方式更改上次执行的值,并且可以通过范围内的$$watchers
对象进行操作:
$scope.digest = function () {
setTimeout(function () {
angular.forEach($scope.$$watchers, function (w) {
w.last.value = Math.random();
});
$scope.$apply();
});
}
<强> DEMO 强>
答案 1 :(得分:0)
如何使用line_items_for_removal = [5,6,7,8] #list of category ids to search through
item = Item.find(1)
line_items_for_removal.each do |line_item|
item.line_items.select{|x| x.category_id == line_item nil}.each{|x| item.destroy}
end
函数然后使用$emit
函数捕获该事件?
在$on
事件函数调用中,事件从子范围冒泡到父范围。触发事件的范围之上的所有范围都将收到有关该事件的通知。
当我们想要将应用程序内的状态更改传达给应用程序的其余部分时,我们会使用$emit()
。
$emit()
然后在捕获阶段:
_.bind($scope.$emit, $scope, 'myCustomEvent');