我有两个州定义,一个“门票”匹配/门票......
$stateProvider // define los estados de mi aplicacion
.state("tickets", { // le asocio propiedades a cada state
url: "/tickets", // ruta
templateUrl: "modules/tickets/views/ticketsTemplate.html", // template a usar
controller: "TicketsController", // controller a usar
controllerAs : "tickets" // alias para el controller, para utilizar el this
});
和另一个“tickets.buscar”匹配/ ticket /:id使用与父级相同的控制器(“TicketsController”)......
.state("tickets.buscar",{
url: "/:id",
templateUrl: "modules/tickets/views/ticketsResult.html"
}
) // heredo el controller del padre
在控制器中,我有一个init()函数来初始化所需的变量。
this.init = function(){
this.title = "Tickets";
this.id = $state.params.id;
if(this.id){
this.getTicket(this.id);
};
};
this.init();
根据我在UI路由器文档中读到的内容,有三种方法可以访问状态:
我正在寻找一种触发控制器重载的方法,这样无论状态如何被接收,init都会被执行。
我知道$ state.go()中的{reload:true}选项但只解决了其中一种访问方法,并且还检查了this other question但是解决方案不起作用, UI路由器的文档中没有记录$ state参数。
答案 0 :(得分:1)
一种好方法可能是在创建状态时使用resolve
对象,以便可以自动为您设置故障单。我没有对此进行测试,但这应该可行。
.state("tickets.buscar", {
url: "/:id",
templateUrl: "modules/tickets/views/ticketsResult.html",
resolve: {
ticket: function($state) {
// return the output of `getTicket`
// you would need to move the whole method here
}
}
}
然后,在您的控制器中,将ticket
和$scope
以及所有内容一起注入。
angular.module('someModule')
.controller('TicketsController', ['$scope', 'ticket', function($scope, ticket) {
console.log(ticket);
]);
答案 1 :(得分:-1)
我会使用`StateChangeSuccess'事件:
$rootScope.$on('$stateChangeSuccess',
function(event, toState, toParams, fromState, fromParams){
//initialize things here...
})