Actually, you bound only scope properties to the view and then these properties have been initialized with service properties values.
Your code with some edits:
var myApp = angular.module('myApp', []);
myApp.service('s1', function() {
this.Input = {
name: 'John'
};
this.name = 'Doe';
});
myApp.controller('c1', function($scope, s1) {
$scope.Input = s1.Input;
$scope.name = s1.name;
});
myApp.controller('c2', function($scope, s1) {
$scope.Input = s1.Input;
$scope.name = s1.name;
$scope.change = function() {
console.log("s1.name = "+s1.name);
s1.name = "ciao";
console.log("s1.name = "+s1.name);
};
});
So if you change the value of $scope.name of the c2 controller (for example editing the input box in the view) that doesn't propagate to s1.name.
And more, if you change the s1.name property (see $scope.change method in c2 controller) this modification is not propagated to $scope.name.
A way to propagate changes in service properties is using events, that is rising events from service and listening the same events in the controllers (see How do I create a custom event in an AngularJs service).
Here is the jsfiddle updated: http://jsfiddle.net/0j0mdjco/2/