diff options
| author | Vojta Jina | 2012-02-29 14:56:29 -0800 | 
|---|---|---|
| committer | Vojta Jina | 2012-03-05 19:15:18 -0800 | 
| commit | b49ddf9848952a95032e9962796ec3a6e50857de (patch) | |
| tree | e9e5266918ff284be840305d6e9af25b45a71585 | |
| parent | 1084ccf7ef8d087e77f2d7197222ab7904fd3fb7 (diff) | |
| download | angular.js-b49ddf9848952a95032e9962796ec3a6e50857de.tar.bz2 | |
docs($route, ng:view): Fix the examples to work on jsfiddle, update docs
| -rw-r--r-- | src/service/route.js | 198 | ||||
| -rw-r--r-- | src/widgets.js | 113 | 
2 files changed, 182 insertions, 129 deletions
| diff --git a/src/service/route.js b/src/service/route.js index 50f335a2..3b135e65 100644 --- a/src/service/route.js +++ b/src/service/route.js @@ -1,74 +1,22 @@  'use strict'; +  /**   * @ngdoc object - * @name angular.module.ng.$route - * @requires $location - * @requires $routeParams - * - * @property {Object} current Reference to the current route definition. - * @property {Array.<Object>} routes Array of all configured routes. + * @name angular.module.ng.$routeProvider + * @function   *   * @description - * Watches `$location.url()` and tries to map the path to an existing route - * definition. It is used for deep-linking URLs to controllers and views (HTML partials). - * - * The `$route` service is typically used in conjunction with {@link angular.module.ng.$compileProvider.directive.ng:view ng:view} - * widget and the {@link angular.module.ng.$routeParams $routeParams} service.   * - * @example -   This example shows how changing the URL hash causes the <tt>$route</tt> -   to match a route against the URL, and the <tt>[[ng:include]]</tt> pulls in the partial. - -    <doc:example> -      <doc:source jsfiddle="false"> -        <script> -          function MainCntl($route, $routeParams, $location) { -            this.$route = $route; -            this.$location = $location; -            this.$routeParams = $routeParams; - -            $route.when('/Book/:bookId', {template: 'examples/book.html', controller: BookCntl}); -            $route.when('/Book/:bookId/ch/:chapterId', {template: 'examples/chapter.html', controller: ChapterCntl}); -          } - -          function BookCntl($routeParams) { -            this.name = "BookCntl"; -            this.params = $routeParams; -          } - -          function ChapterCntl($routeParams) { -            this.name = "ChapterCntl"; -            this.params = $routeParams; -          } -        </script> - -        <div ng:controller="MainCntl"> -          Choose: -          <a href="#/Book/Moby">Moby</a> | -          <a href="#/Book/Moby/ch/1">Moby: Ch1</a> | -          <a href="#/Book/Gatsby">Gatsby</a> | -          <a href="#/Book/Gatsby/ch/4?key=value">Gatsby: Ch4</a><br/> -          <pre>$location.path() = {{$location.path()}}</pre> -          <pre>$route.current.template = {{$route.current.template}}</pre> -          <pre>$route.current.params = {{$route.current.params}}</pre> -          <pre>$route.current.scope.name = {{$route.current.scope.name}}</pre> -          <pre>$routeParams = {{$routeParams}}</pre> -          <hr /> -          <ng:view></ng:view> -        </div> -      </doc:source> -      <doc:scenario> -      </doc:scenario> -    </doc:example> + * Used for configuring routes. See {@link angular.module.ng.$route $route} for an example.   */  function $RouteProvider(){    var routes = {};    /**     * @ngdoc method -   * @name angular.module.ng.$route#when -   * @methodOf angular.module.ng.$route +   * @name angular.module.ng.$routeProvider#when +   * @methodOf angular.module.ng.$routeProvider     *     * @param {string} path Route path (matched against `$location.hash`)     * @param {Object} route Mapping information to be assigned to `$route.current` on route @@ -97,15 +45,8 @@ function $RouteProvider(){     *    - `[reloadOnSearch=true]` - {boolean=} - reload route when only $location.search()     *    changes.     * -   *      If the option is set to false and url in the browser changes, then -   *      $routeUpdate event is emited on the current route scope. You can use this event to -   *      react to {@link angular.module.ng.$routeParams} changes: -   * -   *            function MyCtrl($route, $routeParams) { -   *              this.$on('$routeUpdate', function() { -   *                // do stuff with $routeParams -   *              }); -   *            } +   *      If the option is set to `false` and url in the browser changes, then +   *      `$routeUpdate` event is broadcasted on the root scope.     *     * @returns {Object} route object     * @@ -121,8 +62,8 @@ function $RouteProvider(){    /**     * @ngdoc method -   * @name angular.module.ng.$route#otherwise -   * @methodOf angular.module.ng.$route +   * @name angular.module.ng.$routeProvider#otherwise +   * @methodOf angular.module.ng.$routeProvider     *     * @description     * Sets route definition that will be used on route change when no other route definition @@ -137,6 +78,106 @@ function $RouteProvider(){    this.$get = ['$rootScope', '$location', '$routeParams',        function( $rootScope,  $location,  $routeParams) { + +    /** +     * @ngdoc object +     * @name angular.module.ng.$route +     * @requires $location +     * @requires $routeParams +     * +     * @property {Object} current Reference to the current route definition. +     * @property {Array.<Object>} routes Array of all configured routes. +     * +     * @description +     * Is used for deep-linking URLs to controllers and views (HTML partials). +     * It watches `$location.url()` and tries to map the path to an existing route definition. +     * +     * You can define routes through {@link angular.module.ng.$routeProvider $routeProvider}'s API. +     * +     * The `$route` service is typically used in conjunction with {@link angular.module.ng.$compileProvider.directive.ng:view ng:view} +     * directive and the {@link angular.module.ng.$routeParams $routeParams} service. +     * +     * @example +       This example shows how changing the URL hash causes the `$route` to match a route against the +       URL, and the `ng:view` pulls in the partial. + +       Note that this example is using {@link angular.module.ng.$compileProvide.directive.script inlined templates} +       to get it working on jsfiddle as well. + +      <doc:example module="route"> +        <doc:source> +          <script type="text/ng-template" id="examples/book.html"> +            controller: {{name}}<br /> +            Book Id: {{params.bookId}}<br /> +          </script> + +          <script type="text/ng-template" id="examples/chapter.html"> +            controller: {{name}}<br /> +            Book Id: {{params.bookId}}<br /> +            Chapter Id: {{params.chapterId}} +          </script> + +          <script> +            angular.module('route', [], function($routeProvider, $locationProvider) { +              $routeProvider.when('/Book/:bookId', {template: 'examples/book.html', controller: BookCntl}); +              $routeProvider.when('/Book/:bookId/ch/:chapterId', {template: 'examples/chapter.html', controller: ChapterCntl}); + +              // configure html5 to get links working on jsfiddle +              $locationProvider.html5Mode(true); +            }); + +            function MainCntl($scope, $route, $routeParams, $location) { +              $scope.$route = $route; +              $scope.$location = $location; +              $scope.$routeParams = $routeParams; +            } + +            function BookCntl($scope, $routeParams) { +              $scope.name = "BookCntl"; +              $scope.params = $routeParams; +            } + +            function ChapterCntl($scope, $routeParams) { +              $scope.name = "ChapterCntl"; +              $scope.params = $routeParams; +            } +          </script> + +          <div ng:controller="MainCntl"> +            Choose: +            <a href="/Book/Moby">Moby</a> | +            <a href="/Book/Moby/ch/1">Moby: Ch1</a> | +            <a href="/Book/Gatsby">Gatsby</a> | +            <a href="/Book/Gatsby/ch/4?key=value">Gatsby: Ch4</a> | +            <a href="/Book/Scarlet">Scarlet Letter</a><br/> + +            <ng:view></ng:view> +            <hr /> + +            <pre>$location.path() = {{$location.path()}}</pre> +            <pre>$route.current.template = {{$route.current.template}}</pre> +            <pre>$route.current.params = {{$route.current.params}}</pre> +            <pre>$route.current.scope.name = {{$route.current.scope.name}}</pre> +            <pre>$routeParams = {{$routeParams}}</pre> +          </div> +        </doc:source> +        <doc:scenario> +          it('should load and compile correct template', function() { +            element('a:contains("Moby: Ch1")').click(); +            var content = element('.doc-example-live ng\\:view').text(); +            expect(content).toMatch(/controller\: ChapterCntl/); +            expect(content).toMatch(/Book Id\: Moby/); +            expect(content).toMatch(/Chapter Id\: 1/); + +            element('a:contains("Scarlet")').click(); +            content = element('.doc-example-live ng\\:view').text(); +            expect(content).toMatch(/controller\: BookCntl/); +            expect(content).toMatch(/Book Id\: Scarlet/); +          }); +        </doc:scenario> +      </doc:example> +     */ +      /**       * @ngdoc event       * @name angular.module.ng.$route#$beforeRouteChange @@ -147,12 +188,6 @@ function $RouteProvider(){       *       * @param {Route} next Future route information.       * @param {Route} current Current route information. -     * -     * The `Route` object extends the route definition with the following properties. -     * -     *    * `scope` - The instance of the route controller. -     *    * `params` - The current {@link angular.module.ng.$routeParams params}. -     *       */      /** @@ -165,12 +200,6 @@ function $RouteProvider(){       *       * @param {Route} current Current route information.       * @param {Route} previous Previous route information. -     * -     * The `Route` object extends the route definition with the following properties. -     * -     *    * `scope` - The instance of the route controller. -     *    * `params` - The current {@link angular.module.ng.$routeParams params}. -     *       */      /** @@ -196,8 +225,11 @@ function $RouteProvider(){             * @methodOf angular.module.ng.$route             *             * @description -           * Causes `$route` service to reload (and recreate the `$route.current` scope) upon the next -           * eval even if {@link angular.module.ng.$location $location} hasn't changed. +           * Causes `$route` service to reload the current route even if +           * {@link angular.module.ng.$location $location} hasn't changed. +           * +           * As a result of that, {@link angular.module.ng.$compileProvider.directive.ng:view ng:view} +           * creates new scope, reinstantiates the controller.             */            reload: function() {              dirty++; diff --git a/src/widgets.js b/src/widgets.js index 66ea7fef..8bfd232d 100644 --- a/src/widgets.js +++ b/src/widgets.js @@ -475,61 +475,82 @@ var ngNonBindableDirective = valueFn({ terminal: true });   *   * @description   * # Overview - * `ng:view` is a widget that complements the {@link angular.module.ng.$route $route} service by + * `ng:view` is a directive that complements the {@link angular.module.ng.$route $route} service by   * including the rendered template of the current route into the main layout (`index.html`) file.   * Every time the current route changes, the included view changes with it according to the   * configuration of the `$route` service.   * - * This widget provides functionality similar to {@link angular.module.ng.$compileProvider.directive.ng:include ng:include} when - * used like this: - * - *     <ng:include src="$route.current.template" scope="$route.current.scope"></ng:include> - * - * - * # Advantages - * Compared to `ng:include`, `ng:view` offers these advantages: - * - * - shorter syntax - * - more efficient execution - * - doesn't require `$route` service to be available on the root scope - *   *   * @example      <doc:example module="ngView"> -      <doc:source jsfiddle="false"> -         <script> -           function BootstrapCtrl() {} -           function OverviewCtrl() {} - -           angular.module('ngView', []) -             .config(function($routeProvider) { -               $routeProvider.when('/overview', -                 { controller: OverviewCtrl, -                   template: 'partials/guide/dev_guide.overview.html'}); -               $routeProvider.when('/bootstrap', -                 { controller: BootstrapCtrl, -                   template: 'partials/guide/dev_guide.bootstrap.auto_bootstrap.html'}); -             }); -         </script> -         <div> -           <a href="overview">overview</a> | -           <a href="bootstrap">bootstrap</a> | -           <a href="undefined">undefined</a> - -           <br/> - -           The view is included below: -           <hr/> -           <ng:view></ng:view> -         </div> +      <doc:source> +        <script type="text/ng-template" id="examples/book.html"> +          controller: {{name}}<br /> +          Book Id: {{params.bookId}}<br /> +        </script> + +        <script type="text/ng-template" id="examples/chapter.html"> +          controller: {{name}}<br /> +          Book Id: {{params.bookId}}<br /> +          Chapter Id: {{params.chapterId}} +        </script> + +        <script> +          angular.module('ngView', [], function($routeProvider, $locationProvider) { +            $routeProvider.when('/Book/:bookId', {template: 'examples/book.html', controller: BookCntl}); +            $routeProvider.when('/Book/:bookId/ch/:chapterId', {template: 'examples/chapter.html', controller: ChapterCntl}); + +            // configure html5 to get links working on jsfiddle +            $locationProvider.html5Mode(true); +          }); + +          function MainCntl($scope, $route, $routeParams, $location) { +            $scope.$route = $route; +            $scope.$location = $location; +            $scope.$routeParams = $routeParams; +          } + +          function BookCntl($scope, $routeParams) { +            $scope.name = "BookCntl"; +            $scope.params = $routeParams; +          } + +          function ChapterCntl($scope, $routeParams) { +            $scope.name = "ChapterCntl"; +            $scope.params = $routeParams; +          } +        </script> + +        <div ng:controller="MainCntl"> +          Choose: +          <a href="/Book/Moby">Moby</a> | +          <a href="/Book/Moby/ch/1">Moby: Ch1</a> | +          <a href="/Book/Gatsby">Gatsby</a> | +          <a href="/Book/Gatsby/ch/4?key=value">Gatsby: Ch4</a> | +          <a href="/Book/Scarlet">Scarlet Letter</a><br/> + +          <ng:view></ng:view> +          <hr /> + +          <pre>$location.path() = {{$location.path()}}</pre> +          <pre>$route.current.template = {{$route.current.template}}</pre> +          <pre>$route.current.params = {{$route.current.params}}</pre> +          <pre>$route.current.scope.name = {{$route.current.scope.name}}</pre> +          <pre>$routeParams = {{$routeParams}}</pre> +        </div>        </doc:source>        <doc:scenario> -        it('should load templates', function() { -          element('.doc-example-live a:contains(overview)').click(); -          expect(element('.doc-example-live ng\\:view').text()).toMatch(/Developer Guide: Overview/); - -          element('.doc-example-live a:contains(bootstrap)').click(); -          expect(element('.doc-example-live ng\\:view').text()).toMatch(/Developer Guide: Initializing Angular: Automatic Initialization/); +        it('should load and compile correct template', function() { +          element('a:contains("Moby: Ch1")').click(); +          var content = element('.doc-example-live ng\\:view').text(); +          expect(content).toMatch(/controller\: ChapterCntl/); +          expect(content).toMatch(/Book Id\: Moby/); +          expect(content).toMatch(/Chapter Id\: 1/); + +          element('a:contains("Scarlet")').click(); +          content = element('.doc-example-live ng\\:view').text(); +          expect(content).toMatch(/controller\: BookCntl/); +          expect(content).toMatch(/Book Id\: Scarlet/);          });        </doc:scenario>      </doc:example> | 
