了解特定的$ scope。$ apply(fn)实现

时间:2015-08-02 14:15:08

标签: javascript angularjs angularjs-directive

以下函数包含什么范围。$ apply do?我似乎无法找到答案,但我看到了在指令中使用的示例。

            scope.$apply(function() {
                fn(scope, {
                    $event: evt
                })
            });

我能找到的最接近的解释暗示,当您想要响应的事件不由Angular指令处理时,可能会使用此解释。这是我所指的explanation

如果某人可以提供此模式的预期用途及其含义,我们将不胜感激。

编辑1

我应该早点看到这个。一定要多睡一觉。 因为我的例子不是一个完整的工作。仔细查看引用的解释后,它会更有意义。 fn(scope, {$event: evt})调用通过以下行解析的指令调用对自定义函数的解析引用:

var fn = $parse(tAttrs.myContextmenu);

因此目标函数实现是通过指令捕获特定事件然后禁止它。

所以我想当你不想使用控制器特定的函数混乱指令并且可能触发另一个事件以响应另一个事件然后让控制器处理它时,这很有用。

2 个答案:

答案 0 :(得分:1)

scope.$apply用于为在Angular的执行上下文之外发生的任何异步事件手动触发Angular的摘要周期。

一个这样的异步事件是element.on("click", function(e){...})(或与.on一起捕获的任何其他事件),但也可能是Angular上下文之外的其他异步函数。

第二部分是对" $解析"的调用。表达。它接受范围作为参数和地图" local"变量,例如{$event: evt}。意图与scope: "&"正在做的事情类似 - 但没有创建隔离范围。例如,如果表达式为:

<my-directive p="doSomething(foo)">

然后,如果{$ 1}}被解析,则调用者可以提供doSomething(foo)的值:

foo

这将导致var parsedFn = $parse(attrs.p); parsedFn(scope, {foo: 5})'

的调用

答案 1 :(得分:0)

发布答案,因为它对我有意义(请参阅我的编辑)。

fn(scope, {$event: evt})调用通过以下行解析的指令调用对自定义函数的解析引用:

var fn = $parse(tAttrs.myContextmenu);

因此目标函数实现是通过指令捕获特定事件然后禁止它。

所以我想当你不想使用控制器特定的函数混乱指令并且可能触发另一个事件以响应另一个事件然后让控制器处理它时,这很有用。