I have code and I am trying to figure out the best way to have pages with their own title. Currently in the index.html
it sets the title and somehow every page auto-inherits the title.
index.html snippet
<!DOCTYPE html>
<html>
<head>
<title>My Application</title>
...
The issue is for some reason I can't just go to a different page and type <title>This Window Section</title>
in the <head>
because it will still say "My Application". I've read around the it is possible to just add the title to the $stateProvider
and it will change it but that doesn't change the title either.
applicationUIRoutes.js snippet
app.config(function($stateProvider, $urlRouterProvider) {
...
$stateProvider.state("application.graph", {
url: "/graph",
views: {
templateUrl: "apps/graph.html",
controller: "graphController",
controllerAs: "graphCtrl"
},
title: "Graph", // <-- Doesn't do anything. Page still says 'My Application'
}
...
}
graph.html snippet
<head>
<title>Graph</title> <!-- Doesn't work -->
...
What does work is setting it in the graphController.js
and calling it in the html using ng-init
. I don't want to have to do it this way (and I am pretty sure this is horrible and "hacky").
graphController.js snippet
...
function _setWindowTitle(title) {
document.title = title;
}
...
graph.html snippet
<head>
<div ng-init="graphCtrl.setWindowTitle("Graph");"></div> <!-- Works -->
...
Is there a way to maintain having the default index.html
title be there and be able to override it without doing it my hacky way? I preferably want to do it in my applicationUIRoutes
but I would be fine with just being able to type <title> title of something </title>
in a page and have that properly override the index.html
.
--UPDATED ATTEMPTS--
I have tried following Set Page title using UI-Router and Updating title tag using AngularJS and UI-Router as a guide and added the following:
applicationModule.js
var app = angular.module("myApp, [ " ..
]);
app.run(['$rootScope', '$state', '$stateParams', function($rootScope, $state, $stateParams) {
$rootScope.$state = $state;
$rootScope.$state = $stateParams;
}]);
applicationUIRoutes.js snippet
app.config(function($stateProvider, $urlRouterProvider) {
...
$stateProvider.state("application.graph", {
url: "/graph",
views: {
templateUrl: "apps/graph.html",
controller: "graphController",
controllerAs: "graphCtrl"
},
data: " { pageTitle: "Graph Test" }
}
...
}
graph.html snippet
<head>
<title ng-bind="$state.current.data.pageTitle></title>
But it still doesn't change the title. One thing I have noticed which is probably the issue is when inspecting in browser the actual code, it shows in the <head>
that the title is "My Application (from index.html
). And if I search the title I created is placed somewhere in the body as...
<div class="ng-scope" ui-view="">
<title class="ng-scope"> Graph Title </title>
</div>
Not sure with why this is happening. I imagine it is how the code is structured when using views but I have tried adding the title in different parts of the applicationUIRouter
and it still doesn't change.