2016-04-19 3 views
1

Я использую функции self invoking для включения всего кода javascript внутри углового контроллера (я думаю, что я видел его где-то в качестве лучшей практики). Таким образом, мой контроллер выглядит так:Функции самозапуска Javascript в угловых контроллерах

(function() { 
// code 
})() 

Я использую gulp для объединения всех контроллеров в один файл. Мой вопрос таков. Означает ли это, что все мои Javascript-коды будут вызываться и выполняться при запуске моего приложения? Если это так, я думаю, что это не очень хороший подход. Есть ли какие-либо решения этой проблемы? Любые комментарии? Спасибо

ответ

4

Нет, не все коды выполняются. Когда вы определяете угловые модули

(function() { 
    'use strict'; 

    angular 
    .module('myModule', []) 
    .controller('myController', ['$http', myControllerFunc]); 

    function myControllerFunc ($http) { 
    // ... 
    } 
})(); 

, что запускается на выполнение только в angular методы регистрации модуля и контроллера. Но фактическая логика контроллера находится в функции обратного вызова, и она вызывается только при вызове контроллера (например, маршрутизатором).

Итак, все это хорошо, и обертывание кода в анонимных функциях - это хорошая идея сохранить, например, myControllerFunc, из глобального пространства имен.

+0

Звучит логично. Спасибо за ответ. – Dimitris

1

Не имеет значения, вы определяете свой код в анонимной функции. Javascript-клиент (браузер для этого) должен будет разобрать ваш код в любом случае.

Итак, если у вас есть что-то вызываемое в анонимной функции, оно будет выполнено. Если у вас есть объявленный var с развязанными методами, он просто определит, что var, как и в простом разделенном включении сценария.

Javascript «разбирает» ваш javascript в любом случае, но никогда не вызовет методы, которые не вызывают ваш код. Конечно, он должен знать, что когда вы вызываете foo(bar), существует foo, поэтому он будет разбирать его. Это обычный javascript.

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