<!DOCTYPE html>
<html>

  <head>
    <script data-main="js/main.js" data-require="require.js@2.1.4" data-semver="2.1.4" src="//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.4/require.js"></script>
    <link rel="stylesheet" href="style.css" />
  </head>

  <body>
    <ul>
      <li><a href="#/view1">View 1</a></li>
      <li><a href="#/view2">View 2</a></li>
    </ul>
    <hr></hr>
    <div ng-view></div>
  </body>

</html>
/* Styles go here */


h3.title {
    color: DarkBlue;
}

li.hlist {
    height: 160px;
    width: 160px;
    display: inline;
    list-style-type: none;
}
require.config({
  baseUrl: "js",
  
	// alias libraries paths
  paths: {
      'angular': '//ajax.googleapis.com/ajax/libs/angularjs/1.2.1/angular.min',
      'angular-route': '//ajax.googleapis.com/ajax/libs/angularjs/1.2.1/angular-route.min',
      'jquery': '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min',
      'View1Controller': 'scripts/controllers/ctrl1',
      'View2Controller': 'scripts/controllers/ctrl2',
      'dataServices': 'scripts/services/dataServices',
      'app': 'scripts/app'
  },

  shim: {
      'app': ['angular-route'],
      'angular-route': ['angular']
  },

  // kick start application
  deps: ['app']

});
define(['app'], function (app) {
    app.register.controller('View1Controller', ['$scope', function ($scope) {
        $scope.title = "View 1"; 
    }])
}); 
define(['app','dataServices'], function (app) {
  var injector = angular.injector(['dataServices','ng']);

  app.register.controller('View2Controller', ['$scope', function ($scope) {
    var Pictures = injector.get("Pictures");
    $scope.title = "Second View";
    
    /**
     * A simple:
     *  $scope.rows = Pictures.query();
     * does not works as the dataServices seems to be running outside of angular.
     */
    Pictures.query().then(function (data) {
      $scope.$apply(function () {
        $scope.rows = data;
      })
    });

  }])

}); 
<h3 class="title">{{title}}</h3>
<h3 class="title">{{title}}</h3>
<ul>
    <li class="hlist" ng-repeat="row in rows">
        <img ng-src="{{row.media.m}}">
    </li>
</ul>
define(['app'], function (app) {

    var service = angular.module("dataServices", []);
    
    service.factory('Pictures', ['$http', '$q', '$log', function ($http, $q, $log) {
        var feed_url = "http://ycpi.api.flickr.com/services/feeds/photos_public.gne?format=json&tags=London&jsoncallback=JSON_CALLBACK";
        return {
            query: function () {
                var d = $q.defer();
                
                $http.jsonp(feed_url).success(function (data) {
                    d.resolve(data.items);
                }).error(function (data, status, headers, config) {
                    $log.error("Error: ", headers);
                    d.reject(data);
                });
                    
                return d.promise;
            }
        };
    }]);
    
    return service;
});
define(function () {

  var app = angular.module("webapp", ['ngRoute']);

  app.config(['$routeProvider', '$controllerProvider', '$provide', function ($routeProvider, $controllerProvider, $provide) {
      
      app.register = {
          controller: $controllerProvider.register,
          factory: $provide.factory
      };
      
      function resolveController(names) {
          return {
              load: ['$q', '$rootScope', function ($q, $rootScope) {
                  var defer = $q.defer();
                  require(names, function () {
                      defer.resolve();
                      $rootScope.$apply();
                  });
                  return defer.promise;
              }]
          }
      }
      
      $routeProvider
          .when("/view1", {
              templateUrl: "views/view1.html", controller: "View1Controller",
              resolve: resolveController(["View1Controller"])
          })
          .when("/view2", {
              templateUrl: "views/view2.html", controller: "View2Controller",
              resolve: resolveController(["View2Controller"])
          })
          .otherwise({redirectTo: '/view1'})
  }]);

  angular.element(document).ready(function () {
      angular.bootstrap(document, ['webapp']);
  });

  return app;
});