Оба делают то же самое, но есть одна ключевая разница, что вы заметили.
Разница в том, что первый пример определяет массив значений при вызове app.controller
. Зачем передавать $scope
в виде строкового значения?
минификация
Что делать, если вы создаете приложение, которое должно быть как можно более эффективным, чтобы пользователи не должны ждать каких-либо дополнительных миллисекунды его загрузки. Вы хотите его минимизировать.
Мини-процесс - это процесс, при котором код Javascript сделан как можно меньше.Возможно, что 500 тыс. Javascript будут уменьшены до 50 тыс. Или 100 тыс. Это делается путем удаления посторонней информации, комментариев, пробелов и т. Д.
Но в этом конкретном случае минимизация обычно также изменяет имена параметров на что-то меньшее.
Например, минификация может изменить:
Test("This is a test.");
function Test(myLongParameterNameHere) {
console.log(myLongParameterNameHere.length)
}
к этому:
a("This is a test");
function a(b) {
console.log(b.length);
}
Посмотрите, как много меньше, что это?
Однако Angular анализирует точные названия параметров. Когда он видит параметр с именем «$ scope», он знает, как добавить к этому параметру соответствующую информацию о $ scope. Когда минералист меняет это на что-то другое, Угловая путается.
Таким образом, вы можете дать ANGULAR подсказку, указывая массив строк в том же порядке в списке параметров, например:
app.controller('MainController',['$scope', '$timeout', '$rootScope', function($scope, $timeout, $rootScope) {
$scope.title ='to your own string';
$timeout(function() { console.log("Timout fired") }, 500);
$rootScope.test = "Hello World";
}]);
После минификация этот контроллер код может выглядеть следующим образом:
app.controller('MainController',['$scope', '$timeout', '$rootScope', function(a, b, c) {
a.title ='to your own string';
b(function() { console.log("Timout fired") }, 500);
c.test = "Hello World";
}]);
Миниатюры не изменят название строк.
Вы указали Угловой параметр, который относится к его конкретному угловому аналогу. Даже после майнинга Угловая имеет информацию, необходимую ему для инъекции зависимости.
TL; DR
Добавление имен параметров в виде строк в массиве не обязателен, но это необходимо, если вы планируете делать какие-либо минификация на вашем JavaScript.
[Угловые документы] (https://docs.angularjs.org/guide/di) является правильной ссылкой, чтобы понять это, где они объяснили, как DI работает в угловом режиме и каков его способ. –
В # 2 вы передаете только функцию. В # 1 вы передаете массив, содержащий функцию как последний элемент. Другими элементами массива являются «строковые» версии имен аргументов, которые вы вводите в функцию (пример '$ scope'). Это делается для сохранения имен во время минимизации. Минимизация - это метод, который изменяет имена переменных для сокращения кода. Обычно это не проблема, но с угловой или любой конструкцией, основанной на инжекторах, имена переменных должны быть сохранены, поскольку они используются для отправки запросов на инжектор. – sh0ber