@microf

Почему может не работать pageTitle?

Хочется менять title в зависимости от страницы. Без $rootScope
Подключаю на всё приложение MainController
<!DOCTYPE html>
  <html lang="en" ng-app="app" data-ng-controller="MainController" class="no-js lt-ie9 lt-ie8 lt-ie7"> 
  ...
    <title ng-bind="title"></title>

В MainController
MainController.$inject = ['pageTitle'];

    /* @ngInject */
    function MainController(pageTitle) {
        var vm = this;
        vm.title = pageTitle.getTitle();
         }

PageTitle
function pageTitle() {
        this.title = 'default';
        this.getTitle = getTitle;
        this.setTitle = setTitle;

        ////////////////

        function getTitle() {
           return this.title;
        }

        function setTitle(newTitle) {
            return  this.title = newTitle;
            
        }
    }

В контроллерах делаю так
SomeController.$inject = ['pageTitle'];
    /* @ngInject */
    function SomeController(pageTitle) {
        var vm = this;
      vm.title = pageTitle.setTitle('SomeController Title');
  }
  • Вопрос задан
  • 214 просмотров
Решения вопроса 1
miraage
@miraage
Старый прогер
<html .... data-ng-controller="MainController as ctrl">
<title ng-bind="ctrl.title"></title>


https://docs.angularjs.org/api/ng/directive/ngCont...

// UPD

Ах, видать у Вы еще незнакомы с примитивами в JS. Они передаются по значению, а не по ссылке.

Я бы на Вашем месте сделал так:

angular.module('app', [])

.service('PageTitle', function() {
  this.title = 'default';
  
  this.setTitle = function (title) {
    this.title = title;
  };
  
  this.getTitle = function () {
    return this.title;
  };
})

.controller('MainCtrl', function(PageTitle) {
  PageTitle.setTitle('Foo Bar');
})

.directive('title', function (PageTitle) {
  return {
    restrict: 'E',
    link: link
  };
  
  function link($scope, $el) {
    $scope.$watch(watchFn, updateFn);
    
    function watchFn() {
      return PageTitle.getTitle();
    }
    
    function updateFn(title) {
      $el.html(title);
    }
  }
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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