Я сталкиваюсь с такой проблемой: у меня есть следующая государственная иерархия: заказы (аннотация) → services-> new-> promo
$stateProvider.state("bookings", {
url: "/bookings",
abstract: true,
views: {
"@": {
templateUrl: "/Static/routing-template.html"
},
"content@bookings": {
templateUrl: "/Static/scheduler/scheduler.html"
}
}
});
$stateProvider.state("bookings.services", {
url: "/services",
views: {
"menu@bookings": {
templateUrl: "/Static/services/services-list.html",
controller: "ServicesController"
},
"content@bookings": {
templateUrl: "/Static/scheduler/scheduler.html"
}
},
resolve: {
currencies: function(currencyDataService) {
return currencyDataService.loadData();
},
currentCurrency: function(currencyDataService) {
return currencyDataService.loadCurrent();
},
servicesDataService: function($servicesDataService) {
return $servicesDataService.loadData();
}
}
});
$stateProvider.state("bookings.services.new", {
url: "/new/",
views: {
"content@bookings": {
templateUrl: "/Static/services/add-edit-service.html",
controller: "ServiceAddEditController as controller"
}
},
params: {
serviceId: 0,
//to restore state when back from promo setup tab, null when normally add new service
serviceModel: null
}
});
$stateProvider.state('bookings.services.new.promo', {
url: "promo",
views: {
"content@bookings": {
templateUrl: "/Static/services/promo-tab.html",
controller: "PromoSetupController as promo"
}
},
params: {
serviceModel: {}
}
});
Для трех первых шагов он работает нормально. Но когда я пытаюсь перейти к promo
состоянию, инициализация контроллера, но $ stateParams и $ state не undefined
. PromoControllerCode:
angular.module("CommandCenterApp")
.controller("PromoSetupController", [
function($state, $stateParams) {
var self = this;
self.model = $stateParams.serviceModel;
console.log("Model:", self.model);
}
]);
И как я иду в это состояние:
<p ui-sref="bookings.services.new.promo({serviceModel:controller.typeModel})" class="fake-link hidden-sm hidden-xs">Set up promo codes</p>
Есть идеи?
это синтаксис контроллера. либо уберите скобки:
angular.module("CommandCenterApp")
.controller("PromoSetupController",
function($state, $stateParams) {
var self = this;
self.model = $stateParams.serviceModel;
console.log("Model:", self.model);
}
);
или добавить правильный синтаксис:
angular.module("CommandCenterApp")
.controller("PromoSetupController", ['$state', '$stateParams',
function($state, $stateParams) {
var self = this;
self.model = $stateParams.serviceModel;
console.log("Model:", self.model);
}
]);
serviceModel
в parent в дочернем маршруте .. лучше держите его в дочернем состоянии ..url
дляpromo
также начинаться с косой черты (/
) - какurl: "/promo",
,?