I am tryingto make a service that will allow me to manipulate variables outside ng-view
. I made a service with factory
, but I am at a loss how to transport variables from child-controller to parent (at least, this is the method I have been able to find by reading q&a's here on SO).
For example I would like to be able to manipulate {{ siteName }}
, which is located outside ng-view
from my articleCtrl
controller.
This is what I did:
var blogApp = angular.module('blogApp', [
'ngRoute',
'ngSanitize',
'blogCtrl'
]);
blogApp.config(['$routeProvider', '$locationProvider',
function($routeProvider, $locationProvider) {
$routeProvider.
when('/page', {
templateUrl: '/angular_blog/assets/templates/page.html',
controller: 'pageCtrl'
}).
when('/page/:pagePermaLink', {
templateUrl: '/angular_blog/assets/templates/page.html',
controller: 'pageCtrl'
}).
when('/article/:articlePermaLink', {
templateUrl: '/angular_blog/assets/templates/article.html',
controller: 'articleCtrl'
}).
otherwise({
redirectTo: '/page/404',
templateUrl: '/angular_blog/assets/templates/404.html',
controller: 'pageCtrl'
});
$locationProvider.html5Mode(true);
}]);
blogApp.factory('templateService', function() {
return {
siteName:'',
tagline:'',
pageName:''
};
});
function articleCtrl($scope, templateService) {
$scope.template = templateService;
}
function templateCtrl($scope, templateService) {
$scope.template = templateService;
}
var templateCtrl = angular.module('templateCtrl', []);
var blogCtrl = angular.module('blogCtrl', []);
blogCtrl.controller('articleCtrl', ['$scope', '$routeParams', '$http', 'templateService',
function($scope, $routeParams, $http, templateService) {
$scope.siteName = "Something awesomediculous";
}]);
blogCtrl.controller('pageCtrl', ['$scope', '$routeParams', '$http',
function($scope, $routeParams, $http) {
// ...
}]);
blogApp.controller('templateCtrl', function($scope, templateService) {
// ...
});
<!DOCTYPE html>
<html lang="en" data-ng-app="blogApp" data-ng-controller="templateCtrl">
<head>
<meta charset="UTF-8">
<title>{{ pageName + " - " + siteName }}</title>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-route.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.3/angular-sanitize.min.js"></script>
<base href="/angular_blog/">
</head>
<body>
<header>
<h1>{{ siteName }}</h1>
<p>{{ tagline }}</p>
</header>
<main id="content" data-ng-view></main>
</body>
</html>