2015-08-02 2 views
0

Что делает следующая функция завершенной областью? $ Apply do? Я не могу найти ответ на этот вопрос, но я вижу примеры, где он используется в директивах.

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

Ближайшее объяснение, которое я мог бы найти означает, что это может быть использовано, когда событие, которое вы хотите ответить не обрабатывается угловыми директивами. Вот explanation Я имею в виду.

Если кто-то может обеспечить предполагаемое использование этого шаблона и что он означает, это будет оценено.

EDIT 1

я видел это раньше. Необходимо больше сна. Поскольку мой пример не является полным рабочим. Это имеет больший смысл после тщательного изучения ссылочного объяснения. fn(scope, {$event: evt}) вызова вызов разобранной ссылки на пользовательскую функцию с помощью директивы разобранной в следующей строке:

var fn = $parse(tAttrs.myContextmenu); 

Таким образом, реализация целевой функции захват конкретного события с помощью директивы, а затем подавляя его.

Таким образом, я думаю, это полезно, когда вы не хотите загромождать директивы с помощью определенных функций контроллера и, возможно, запускаете другое событие в ответ на другое событие, а затем позволяете контроллеру обрабатывать его.

ответ

1

scope.$apply Используется для ручного запуска цикла вычисления углов для любых асинхронных событий, которые происходят вне контекста выполнения углового.

Одним из таких событий async является element.on("click", function(e){...}) (или любое другое событие, связанное с .on), но также может быть другой функцией асинхронного программирования вне углового контекста.

Вторая часть является вызовом выражения «$ parsed». Он принимает область действия как параметр и карту «локальных» переменных, например {$event: evt}. Намерение похоже на то, что делает scope: "&", но без создания области изоляции.Например, если выражение:

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

затем, если doSomething(foo) составляет $ разобран, абонент может поставить значение foo:

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

Это приведет призывание doSomething(5)

+0

Спасибо ! Я пропустил строку, показывающую '$ parse' раньше, поэтому, когда я заметил это до вашего поста, все нажало. Мне нравится, что вы упомянули, что нет необходимости создавать изоляционную сферу. Я думаю, что события 'element.on' - это то, что сработало. Я предполагал, что Angular обертывает их, но это только пользовательские события 'ng- *', которые обертываются. – Rai

0

Ответ на этот вопрос, поскольку он имеет смысл для меня (см. Мое редактирование).

fn(scope, {$event: evt}) вызова вызов разобранной ссылки на пользовательскую функцию с помощью директивы разобранной в следующей строке:

var fn = $parse(tAttrs.myContextmenu); 

Таким образом, реализация целевой функции захват конкретного события с помощью директивы, а затем подавляя его.

Таким образом, я думаю, это полезно, когда вы не хотите загромождать директивы с помощью определенных функций контроллера и, возможно, запускаете другое событие в ответ на другое событие, а затем позволяете контроллеру обрабатывать его.

Смежные вопросы