2014-02-09 3 views
2

Я только начинаю смотреть на Угловое, но с трудом обматываю голову вокруг потребности в $scope. Javascript уже имеет понятие сферы действия через контекст (то есть this) и позволяет программистам вводить этот контекст в функцию с использованием call или apply.

Существуют ли различия между Angular's, $scope и ключевым словом this?

Если есть разница, то в чем значение this в контроллере или директиве?

Заранее спасибо :)

+0

«$ scope» - это вложенная зависимость, я полагаю, это не так просто, как вызов функции с контекстом. Но вы можете, если факт использует 'this' как' $ scope' с синтаксисом 'controller as' в' ng-controller'. Но '$ scope' он все еще инъективен. – elclanrs

ответ

1

Да, они совсем не то же самое. Конструктор - это всего лишь созданный конструктор (созданная вами функция), созданная инжектором.

$scope более концептуально связан с DOM. В этих элементах с ng-controller получите это $scope, а дочерние элементы тоже. Если дочерний элемент со своей областью (контроллер/директива) имеет те же свойства, что и родительская область, вы не сможете получить к ним доступ. Он также имеет все внутренние угловые значения информации в сводке (грязная проверка/привязка данных), например, часы, события и т. Д. Я бы прочитал this

Что касается синтаксиса myCtrl as, это хорошо, но все, что он действительно делает, помещает экземпляр контроллера в область видимости. С именем, которое вы установили.

например myCtrl as foo является basically$scope.foo = myCtrlInstance;. Что вы способны делать и в своем контроллере.

+1

Я понял, что я смешиваю свои концепции контекста и сферы действия, что вызвало большую путаницу. Особенно вокруг необходимости инъекции зависимостей в JavaScript. Кроме того, я не понимал, что контроллеры и директивы были объектными конструкторами. Я прочитал статьи, которые вы связали, а затем добавили еще кое-что в Google, которое привело меня сюда, http://clubajax.org/javascript-scope-and-context-not-the-same-thing/. Тогда все, наконец, нажало на меня. Инъекция зависимостей в JS/Angular - это всего лишь способ для изменения кода. i.e завершение замыкания в объект, переданный в качестве параметра. – hypno7oad

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