AngularJs ui-router自定义网址

时间:2015-10-23 04:43:55

标签: angularjs angular-ui-router

好的,这是问题所在。我有一个应用程序,用户可以注册为商家,可以拥有自己的商店名称,我想要的网址是:

http://localhost:8000/#/storename 

这与contactus, aboutus等默认主页子页面发生冲突。以下是我ui-router的实现。

.state('home', {
            url: '/', --> http://localhost:8000/#/ [work]
            templateUrl: 'views/main_home.html',
            resolve: loadSequence('flexSlider','wantCtrl'),
            css: 'assets/vendor/style.css'
          })
      .state('home.contact', {
            url: '/contact', --> http://localhost:8000/#/contact [not work]
            views: {
                    'homeView': {
                        templateUrl: 'partials/contact.html',

                    }
                },
            css: ['assets/vendor/style.css']
          })
           .state('store',{
            url: '/:storename',  -->  http://localhost:8000/#/myshop [work]
                templateUrl: 'views/main_store.html'        
            })
         .state('store.list', {
            url: '/lists', -->  http://localhost:8000/#/myshop/lists [work]
                views: {
                    'primView': {
                        templateUrl: 'views/store_home.html',
                    }
                }   
            })

此处http://localhost:8000/#/contact正在访问store模板,就好像contact是商店名称一样。默认无论继承home.[anything]应该在父定义的模板下。我该如何解决这个问题?

有这样做的脏方法,即为每个子页面定义新的父级,但这将重复页眉和页脚部分布局。

1 个答案:

答案 0 :(得分:0)

据我所知,角度在处理路线时采用从上到下的方法。所以定义

       .state('store',{
        url: '/:storename',  -->  http://localhost:8000/#/myshop [work]
            templateUrl: 'views/main_store.html'        
        })

在所有其他路线之后。在你的情况下,当达到角度/:storename时,它会认为联系人是商店名称并加载该页面。要避免它,你需要保持最后