Аз съм нов за Angular JS и в урок те поставят, че начинът за създаване на контролер е:
angular.module("app", [])
.controller("TodoController", ["$scope", function ($scope) {
$scope.todos = [
{ title: "Learn Javascript", completed: true },
{ title: "Learn Angular.js", completed: false },
{ title: "Love this tutorial", completed: true },
{ title: "Learn Javascript design patterns", completed: false },
{ title: "Build Node.js backend", completed: false },
];
}]);
Искам да разбера какво прави всеки един от параметрите:
- "TodoController"
- масив
- "$ Обхват"
- функция
Предполагам, че първото е името на контролера, а последното е конструкторът TodoController.
Но какво е "$scope"
? Име на променлива, което да се използва в HTML, име на метод?
Мога ли да изпратя повече параметри в масива?
Търсих в Angular Dokcs, но е доста куц, без док за методите. Търсенето на код на клас нито даде много повече информация.
Отговори:
1 за отговор № 1Вторият аргумент (масив от низове + функция) се използва за инжектиране на зависимост.
angular.controller("TodoController", ["$scope", function ($scope) { ... }])
В случай, че вашият код стане минимизиран ъглов ще знае кои зависимости да инжектирате, тъй като низовете не са засегнати от минимизиране.
Така че горният код след минимизиране ще стане нещо подобно:
angular.controller("TodoController",["$scope",function(o){...}]);
И все още ще се чете по алгоритъма на инжектиране на ъгловата зависимост.
PS. Масивът не е задължителен, можете да преминете там просто обикновена функция.
2 за отговор № 2
В масива аргументите (String) са.
$scope
е обект, който поддържа обвързването с изгледа и неговото съдържание е достъпно както в изглед, така и в контролер. Тя се създава от $new
метод на ($rootScope
и след това йерархията), когато го инжектирате в нов контролер и е необходимо да се създаде инстанция на този контролер.
1 за отговор № 3
Да. Ти си прав.
Първият параметър е името на контролера. Вторият масив, където последният елемент в масива ще бъде функция на контролера, а други елементи са зависимости. Това се нарича Inline Array Annotation.
Можете да създадете контролера, без да предавате масив, освен ако не смекчите кода си (Implicit annotation.)
Внимателен: Ако планирате да изтриете кода, имената на услугите ви ще бъдат преименувани и ще разбият приложението ви.
Моля, проверете три начина за създаване на контролери или услуги. https://docs.angularjs.org/guide/di