我正在尝试与指令合作以应用更多的最佳实践,但是我对从指令中应用范围值的最佳方法有一些疑问。
在这个小提琴演示中,您可以看到是否单击“ Toggle displayMenu”按钮,div仍处于打开状态。如果您在指令的代码中切换第7-8行:
scope.yolo = function () {
scope.ctrl.toggle(); // COMMENT ME
//scope.ctrl.toggleApply(); // UNCOMMENT ME
};
Run Code Online (Sandbox Code Playgroud)
至 :
scope.yolo = function () {
//scope.ctrl.toggle(); // COMMENT ME
scope.ctrl.toggleApply(); // UNCOMMENT ME
};
Run Code Online (Sandbox Code Playgroud)
displayMenu div将关闭。
现在,问题是我被迫编写2个函数,其中一个带有“ $ scope。$ apply”,而另一个没有,这显然不是一种聪明的方法……除非我使用safeApply像这样:
$rootScope.safeApply = function(fn) {
var phase = this.$root.$$phase;
if(phase == '$apply' || phase == '$digest') {
if(fn && (typeof(fn) === 'function')) {
fn();
}
} else {
this.$apply(fn);
}
};
Run Code Online (Sandbox Code Playgroud)
是safeApply是最佳实践吗?如果没有,实现我想要的最佳方法是什么?