2015-03-22 2 views
1

У меня есть веб-страница с очень простой структурой, представляющая собой левую навигацию, панель заголовка и область содержимого. Если я должен описать его с кодом, он выглядит как этотРегулятор контроллера AngularJS и визуализировать представление еще раз?

<body> 
<aside ng-controller="SideNavCtrl">Left Nav data</aside> 
<header ng-controller="HeaderCtrl">Page Title</header> 
<section> 
    <article ng-view>Page Content</article> 
</section> 

Я использую ngRoute и изменить мои маршруты влево и вправо. Я хочу обновить «Название страницы» от контроллера, который принял маршрут. Я пробовал сотни разных способов, но изменение переменной никогда не приводит к обновлению данных заголовков. Вот моя последняя переменная доля между контроллерами (не работает)

app.controller("HeaderCtrl", ["$scope", "HeaderData", function($scope, HeaderData) { 

     $scope.title = HeaderData.title(); 

    }]); 

    app.factory("HeaderData", function() { 

     var title = 'Default'; 

     return { 
      title: function() { return title; }, 
      setTitle: function(newTitle) { title = newTitle; } 
     } 

    }); 

Позже в разгромленной контроллера я иду, как этот

app.controller("PreviewBuildCtrl", ["$scope", "$routeParams", "$location", "BuildsAPIService", "HeaderData", function($scope, $routeParams, $location, BuildsAPIService, HeaderData) { 

    $scope.build = BuildsAPIService.getBuildById($routeParams.buildId); 

    HeaderData.setTitle("Previewing Build"); 

    console.log(HeaderData); 

    if (!$scope.build) { 
     $location.url('/builds/' + $routeParams.profession); 
    } 

}]); 

Проблема заключается в том, что использование HeaderData.setTitle() Безразлично» t обновить содержимое заголовка. Я действительно не хочу писать код jQuery для этой задачи. Должен быть более умный, более угловатый способ сделать это.

Все, что я хочу сделать, это изменить название заголовка на «странице B» при переходе на страницу б со страницей а и я считаю добавлением хлебных крошек плагин излишества для выполнения этой задачи под руку :(

ответ

2

Вы сломать связывание данных с помощью title = newTitle. контроллеры указывают на старую title, но HeaderData не указывает на него больше, так что теряется. Вам нужна другая точка.

this.title = newTitle; 

title метод также возвращает this.title, конечно.

+0

Я получаю «неопределенный» таким образом, независимо от того, что PreviewBuildCtrl только что использовал setTitle – Sk1ppeR

+0

Whoop, исправил его. Теперь я передаю весь HeaderData в область действия и просто использую эти методы в представлении. Обновления соответственно сейчас, спасибо :) – Sk1ppeR

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