是否安全应用是最佳实践
Is safeApply is best practice?
我正在尝试更多地使用指令来应用更多的最佳实践,但我对从指令应用范围值的最佳方法有一些疑问。
在这个小提琴演示中,您可以看到如果您单击"切换显示菜单"按钮,div 仍然处于打开状态。如果您在指令代码中切换第 7-8 行:
scope.yolo = function () {
scope.ctrl.toggle(); // COMMENT ME
//scope.ctrl.toggleApply(); // UNCOMMENT ME
};
自:
scope.yolo = function () {
//scope.ctrl.toggle(); // COMMENT ME
scope.ctrl.toggleApply(); // UNCOMMENT ME
};
显示菜单div 将关闭。
现在,问题是我被迫编写 2 个函数,一个带有"$scope.$apply",一个没有,这显然不是一个聪明的方法......除非我使用安全申请,例如:
$rootScope.safeApply = function(fn) {
var phase = this.$root.$$phase;
if(phase == '$apply' || phase == '$digest') {
if(fn && (typeof(fn) === 'function')) {
fn();
}
} else {
this.$apply(fn);
}
};
安全应用是最佳实践吗?如果没有,完成我想要的最好方法是什么?
查看$$phase
被认为是不好的做法。从类似的主题来看,角度开发人员说:
出于面向未来的原因,您不应该使用 $$phase
建议的最佳做法是使用 $timeout 或 $evalAsync,它们都会延迟代码的执行。从本质上讲,这两个函数都将在新的$digest周期中执行,因此您不必自己手动调用$apply。大多数情况下,如果您只需要在 safeApply 方案中更新一些代码,则可以使用 $evalAsync。
scope.$evalAsync(function(scope) {
// run the toggle function without caring if you're in the digest or not
scope.ctrl.toggle();
});
你可以阅读 Ben Nadal 的这篇文章,看看不同的函数是如何在 JavaScript 过程中执行的。
相关文章:
- 如何在读取XLS/XLSX本地文件时,使用IE的javascript代码启用未标记为安全的ActiveX控件
- 在localhost Dev Box上测试JSONP请求的最佳方式
- 有条件更新d3.js力图中节点的最佳方法
- 使用javascript存储变量的最安全方式
- 为react组件传递道具的最佳方式
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 让Webpack管理Quirky AMD定义的最佳方式
- 在承诺链中处理早期回报的最佳方式
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 是否存在React Native“;WEB代码安全防护”;
- Angularjs 1.5.x本地化最佳实践
- 处理浮点错误的最佳方法是什么
- 内容安全策略:页面's设置阻止加载资源
- javascript导入的最佳实践是什么
- 在Angular Service/Controller中实现安全$apply的最佳方法
- 是否安全应用是最佳实践
- 如何进行最佳和安全的jQuery表单检查
- 最佳OOP JavaScript安全实践
- 确保javascript前端/REST后端架构网站安全的最佳方法
- 使用AngularJS安全处理登录的最佳方法是什么