diff options
| author | Luis Ramón López | 2012-11-12 22:09:53 +0100 | 
|---|---|---|
| committer | Misko Hevery | 2013-02-14 21:36:59 -0800 | 
| commit | 7eafbb98c64c0dc079d7d3ec589f1270b7f6fea5 (patch) | |
| tree | fd990d11f349ebc063f3891ab1bbfc3aaa675671 /src | |
| parent | bb8448c011127306df08c7479b66e5afe7a0fa94 (diff) | |
| download | angular.js-7eafbb98c64c0dc079d7d3ec589f1270b7f6fea5.tar.bz2 | |
feat(routeProvider): Add support to catch-all parameters in routes
This allows routeProvider to accept parameters that matches
substrings even when they contain slashes if they are prefixed
with an asterisk instead of a colon.
For example, routes like edit/color/:color/largecode/*largecode
will match with something like this
http://appdomain.com/edit/color/brown/largecode/code/with/slashs.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ng/route.js | 30 | 
1 files changed, 23 insertions, 7 deletions
diff --git a/src/ng/route.js b/src/ng/route.js index 971caa1c..afdac3fb 100644 --- a/src/ng/route.js +++ b/src/ng/route.js @@ -23,9 +23,18 @@ function $RouteProvider(){     *    `$location.path` will be updated to add or drop the trailing slash to exactly match the     *    route definition.     * -   *    `path` can contain named groups starting with a colon (`:name`). All characters up to the -   *    next slash are matched and stored in `$routeParams` under the given `name` when the route -   *    matches. +   *      * `path` can contain named groups starting with a colon (`:name`). All characters up +   *        to the next slash are matched and stored in `$routeParams` under the given `name` +   *        when the route matches. +   *      * `path` can contain named groups starting with a star (`*name`). All characters are +   *        eagerly stored in `$routeParams` under the given `name` when the route matches. +   * +   *    For example, routes like `/color/:color/largecode/*largecode/edit` will match +   *    `/color/brown/largecode/code/with/slashs/edit` and extract: +   * +   *      * `color: brown` +   *      * `largecode: code/with/slashs`. +   *     *     * @param {Object} route Mapping information to be assigned to `$route.current` on route     *    match. @@ -341,12 +350,12 @@ function $RouteProvider(){        //   regex only once and then reuse it        // Escape regexp special characters. -      when = '^' + when.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&") + '$'; +      when = '^' + when.replace(/[-\/\\^$:*+?.()|[\]{}]/g, "\\$&") + '$';        var regex = '',            params = [],            dst = {}; -      var re = /:(\w+)/g, +      var re = /\\([:*])(\w+)/g,            paramMatch,            lastMatchedIndex = 0; @@ -354,8 +363,15 @@ function $RouteProvider(){          // Find each :param in `when` and replace it with a capturing group.          // Append all other sections of when unchanged.          regex += when.slice(lastMatchedIndex, paramMatch.index); -        regex += '([^\\/]*)'; -        params.push(paramMatch[1]); +        switch(paramMatch[1]) { +          case ':': +            regex += '([^\\/]*)'; +            break; +          case '*': +            regex += '(.*)'; +            break; +        } +        params.push(paramMatch[2]);          lastMatchedIndex = re.lastIndex;        }        // Append trailing path part.  | 
