Задать вопрос
samoilenkoevgeniy
@samoilenkoevgeniy
Lead Full-Stack Web Developer

Как использовать $scope вне контроллера?

Изучаю angularjs, и встал на такой, вроде бы банальной, вещи:

Вот есть у меня модуль siteContent, объявляю его так:
<!DOCTYPE html>
<html lang="ru" ng-app="siteContent">
<head >
    ....
</head>
<body>
    <ng-view></ng-view>
</body>
</html>


В модуле при помощи $routeProvider у меня происходит навигация ,с этим все хорошо, при помощи rest достаю данные из базы, все окей, внутри ng-view я использую шаблоны, с этим тоже проблем нет. Но вот в чем штука, поскольку я делаю простой сайт мне нужно на нем при смене страниц менять и title, и description и прочее, а я не пойму как, ведь по сути они находятся вне контроллера. Как быть?

Пример с phone cat приложением изучил вдоль и поперек, но там о таком ни слова, может есть какие-то другие примеры или вообще что-либо. В поиске находил нужный вопрос Как в AngularJS менять title и мета теги в head?, однако совсем не понял, как это может помочь.
Прошу помощи!
  • Вопрос задан
  • 236 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 2
premas
@premas
Full-stack web-developer
Заведите себе какой-нибудь сервис, например Page, в котором будет лежать вся информация, относящаяся к странице в общем, такая как текущий пункт меню, title и тд.

app.service('Page', [function () {
  var Page = this;
}]);


Внутри app.run просто поместите этот сервис в $rootScope:
app.run(['$rootScope', 'Page', function ($rootScope, Page) {
  $rootScope.Page = Page;
}])


Теперь просто заинжектите этот сервис в любой контроллер и устанавливайте ему все что душе угодно.
app.controller('MyCtrl', ['$scope', 'Page', function ($scope, Page) {
  Page.myVar = 'lol';
}])


В ангуляровском шаблонизаторе будет доступно как {{Page.myVar}} или более строго {{$root.Page.myVar}}
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
У подхода предложенного Павел Кононенко есть свои плюсы (просто), и минусы (логика из view layer чуть чуть вытекла в контроллер). Что бы этого не происходило можно сделать это дело при помощи старых добрых директив и выставлять заголовки и метатеги через них во вьюшках. Далее уже есть варианты:
- в директивах ловить метаданные и сэтить их через сервис, метаданные выводит отдельная директива
- передавать данные напрямую в директиву отвечающую за вывод метатегов (директивы могут общаться).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы