thank u for looking! Here's my question.
[app.html]
...
<custom />
...
<script>
...
app.config(["$routeProvider", function ($routeProvider) {
    $routeProvider.when("/checkout", {
        templateUrl: "views/checkoutSummary.html",
    });
    $routeProvider.when("/products", {
        templateUrl: "views/productList.html"
    });
    $routeProvider.otherwise({
        templateUrl: "/views/productList.html",
    })
}])
...
</script>
The directive for "custom" is here:
<div class="navbar-right">
    <div class="navbar-text">
        <b>购物车:</b>
        {{itemCount()}} 个商品,
        {{total() | currency}}
    </div>
    <a href="#/checkout" class="btn btn-default navbar-btn">结算</a>
</div>
When I click element "a",the href in my browser is:
http://localhost:3000/app.html#!#%2Fcheckout
and the $location.hash() is /checkout
Actually, the correct href should be:
http://localhost:3000/app.html#!/checkout
or
http://localhost:3000/app.html#!%2Fcheckout
Why that the program add the "#" behind the "!"?
Tx and Happy Chinese New Year!
 
    