我正在实施注册服务,用户建议选择三个参数:建筑(沙龙),服务和公司(类别)。我为ui-router
使用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 :(得分:1)
要了解状态应如何运作的基本概念,您可以看到this github example。
用于更改状态使用
$scope.changeState = function () {
$state.go('any.state.you.want.', {param: param});
};
使用类似的东西
<button ng-click="changeState()">Another state</button>