AngularJS routeProvider路由到错误的模板

时间:2014-03-27 12:52:41

标签: angularjs angularjs-routing

我的app.js文件中有以下两条路线,由于某种原因我不知道何时尝试导航到/clients/new-invoice我看到了/clients/:clientID路线和模板。我可以转到正确页面的唯一方法是删除/clients/:clientID路由。

此外,我注意到只有在我将:clientID添加到下面的路线后才开始发生这种情况。

有人可以通过告诉我这里到底做错了什么来帮助我吗?

    $routeProvider.when('/clients/:clientID', 
            {     templateUrl: 'templates/client-profile-view.html', 
                  controller: 'ClientsController',
                  title: 'Client Profile',
                  data: {
                     auth: true,
                     plevel: [5] 
                  }                
            });    


    $routeProvider.when('/clients/new-invoice', 
            {     templateUrl: 'templates/new-invoice.html', 
                  controller: 'InvoicesController',
                  title: 'New Invoice',
                  data: {
                     auth: true,
                     plevel: [5] 
                  }                
            });

4 个答案:

答案 0 :(得分:7)

您只需更改订单,在/clients/:clientID之后放置/clients/new-invoice。订单很重要。应在静态路径之后定义所有正则表达式路径。

答案 1 :(得分:2)

您需要首先使用更具体的匹配,最后使用通用匹配:

$routeProvider.when('/clients/new-invoice', 
        {     templateUrl: 'templates/new-invoice.html', 
              controller: 'InvoicesController',
              title: 'New Invoice',
              data: {
                 auth: true,
                 plevel: [5] 
              }                
        })

.when('/clients/:clientID', 
        {     templateUrl: 'templates/client-profile-view.html', 
              controller: 'ClientsController',
              title: 'Client Profile',
              data: {
                 auth: true,
                 plevel: [5] 
              }                
        });    

答案 2 :(得分:0)

尝试propertyie caseInsensitiveMatch

$routeProvider.when('/clients/new-invoice', 
{     templateUrl: 'templates/new-invoice.html', 
      controller: 'InvoicesController',
      caseInsensitiveMatch: true,
      title: 'New Invoice',
      data: {
      auth: true,
      plevel: [5] 
      }                
});

我不确定它是否有效

或者只是在第一个位置添加此路线

答案 3 :(得分:0)

我和一位实施了我们的routeProvider的同事讨论了这个问题。正如我所想:没有某种preg匹配机制(我的参数是一个整数/ uuid或像#' new-voice&#39 ;?这样的字符串),这不会起作用。想想这个例子:

/ clients /:clientID =>获取客户详细信息

/ client /:clientID / new-invoice =>获取特定客户新发票

/ clients / new-invoice =>让所有客户获得新发票

但是,如果您被迫按照示例中的描述进行路由,则必须找到另一种解决方案,例如preg匹配参数。

希望我能帮上忙, 问候