理解特定的$scope.$apply(fn)实现

Understanding specific $scope.$apply(fn) implementation

本文关键字:fn 实现 apply scope      更新时间:2023-09-26

下面的函数用作用域包装了什么。申请美元做什么?我似乎找不到这个问题的答案,但我看到它在指令中使用的例子。

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

我能找到的最接近的解释是,当你想要响应的事件没有被Angular指令处理时,可能会使用它。这就是我所指的解释。

如果有人能提供此模式的预期用途及其含义,将不胜感激。

编辑1

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

var fn = $parse(tAttrs.myContextmenu);

所以目标函数实现是通过指令捕获一个特定的事件,然后抑制它。

所以我想这是有用的,当你不想混乱的指令与控制器特定的功能,也许触发一个不同的事件响应另一个事件,然后让控制器处理它。

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

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

第二部分是对"$parsed"表达式的调用。它接受一个范围作为参数和一个"局部"变量的映射,比如{$event: evt}。其意图与scope: "&"所做的非常相似,但没有创建孤立的作用域。例如,如果表达式是:

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

那么,如果doSomething(foo)被$解析,调用者可以提供foo的值:

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

这将导致调用doSomething(5)

回复这个问题,因为它对我来说是有意义的(参见我的编辑)。

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

var fn = $parse(tAttrs.myContextmenu);

所以目标函数实现是通过指令捕获一个特定的事件,然后抑制它。

所以我想这是有用的,当你不想混乱的指令与控制器特定的功能,也许触发一个不同的事件响应另一个事件,然后让控制器处理它。