javascript - 合并多个 Angular scope watch 语句

标签 javascript angularjs d3.js

我在一个指令中有多个不同的 watch 语句,用于监视 scope 并在不同事件(窗口调整大小、表单提交等)上重新呈现 d3 指令

window.onresize = function() {
  scope.$apply();
};

// Call render function on window resize
scope.$watch(function() {
  return angular.element($window)[0].innerWidth;
}, function() {
  scope.render(scope.data);
});

// Watch for data changes and re-render
scope.$watch('data', function() {
  return scope.render(scope.data);
}, true);

问题是,我最终会为同一事件多次调用渲染。有什么办法可以将这三个不同的 $watches 合并成一个更简洁的结构吗?我猜想看 scope 也会看 scopedata 属性,但显然不是!这是为什么?

最佳答案

可能不是最好的解决方案,但可能会有所帮助。

underscorejs 的 throttle 接受一个函数和函数执行之间的最短时间,并返回一个函数,该函数最多每 wait 毫秒调用一次指定的函数。

_.throttle(func, wait, [options])

info

关于javascript - 合并多个 Angular scope watch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24437263/

相关文章:

javascript - 刷新当前 url onchange 事件处理程序

javascript - 无法将 ng-repeat 值从表传递到自定义指令中?

javascript - 如何使用 angularjs 将多个表单数据一次性发送到服务器?

javascript - 使用 D3.js 的 typescript 类型转换

javascript - D3.js 方法链接命令在我拆分它时不起作用,它起作用

javascript - 为什么我的 map 函数没有返回 d3 js 中的所有 csv 文件行?

javascript - 无法读取未定义的属性 'cnt'

javascript - 使用变量将 jQuery 处理程序分配给多个 DIV

javascript - 如何使用 forEach 循环在 Javascript 中迭代索引

angularjs - 用户界面路由器 : open state in new tab with target =“_blank” with object params