1

我正在實施註冊服務,用戶建議選擇三個參數:建築(沙龍),服務和公司(類別)。對於此任務,我使用ui-router作爲AngularJS什麼適當的方法來路由AngularJS中的狀態鏈?

我創建原型六個相互嵌套的狀態,像這樣:

angular.module('ngApp', ['ngAnimate', 'ui.router']) 
.config(function($stateProvider, $urlRouterProvider) { 
$stateProvider 
    .state('form', { 
    url: '/form', 
    template: '<div ui-view></div>', 
    controller: 'dummyController' 
    }) 
    .state('form.salonChoose' ,{ 
    url:'/salChoice', 
    template: '<button ng-click="changeSalon()">salon 99</button>' 
    }) 
    .state('form.salons', { 
    url: '/salons/:salonId', 
    template: '<div>{{model.salon}}</div>' + 
    '<div ui-view></div>', 
    controller: function($scope, $stateParams) { 
     $scope.model.salon = $stateParams.salonId; 
     location.href = '/#/form/salons/'+$scope.model.salon+'/serviceChoice'; 
    } 
    }) 
    .state('form.salons.serviceChoice', { 
    url:'/serviceChoice', 
    template: '<button ng-click="changeService()">service 99</button>' 
    }) 
    .state('form.salons.services', { 
    url: '/services/:serviceId', 
    template: '<div>{{model.service}}</div>' + 
    '<div ui-view></div>', 
    controller: function($scope, $stateParams) { 
     $scope.model.service = $stateParams.serviceId; 
     location.href = '/#/form/salons/'+$scope.model.salon+'/services/' 
     +$scope.model.service+'/catChoice'; 
    } 
    }) 
    .state('form.salons.services.catChoice', { 
    url:'/catChoice', 
    template: '<button ng-click="changeCat()">cat 99</button>' 
    }) 
    .state('form.salons.services.categories', { 
    url: '/categories/:catId', 
    template: '<div>{{model.cat}}</div>', 
    controller: function($scope, $stateParams) { 
     $scope.model.cat = $stateParams.catId; 
    } 
    }); 
$urlRouterProvider.otherwise('/form/salChoice'); 

這種方法適用於這樣的實現。簡單用例通過: 運行應用程序與自定義網址:#/form/salons/1/services/2/categories/3它應該將在狀態form.salons.services.categories。原型很好。

但是當我在生產應用程序中使用這種方法時,狀態在第一次改變後不會改變。不同的是,在生產嵌套狀態必須使用相同的ui-view而不是嵌套,我認爲這是點,爲什麼國家沒有改變。

當解析URL時,什麼方法來處理狀態變化?

+0

你試過'$ state.go()這樣做 –

回答

1

爲了得到一個國家應該如何工作的基本想法,你可以看到this github example

改變狀態使用

$scope.changeState = function() { 
    $state.go('any.state.you.want.', {param: param}); 
}; 

通過使用這樣的事情

<button ng-click="changeState()">Another state</button> 
+0

我一直如此,不工作'方法。 – Juriy

+0

檢查您的州名併發布錯誤您在那裏犯了一些錯誤。 –

+0

我發現一個錯誤,$ state是未定義的。它是服務嗎? – Juriy

相關問題