我正在使用具有多个命名视图的UI路由器处理AngularJS应用程序。我的应用程序在index.html中有一个ui-view,状态配置为:
$stateProvider
.state('login', {
url : '/',
templateUrl : "partials/login.html",
controller : "login-controller"
})
.state("portal", {
url :"",
abstract : true,
templateUrl : "partials/header.html",
})
.state("portal.create-claim", {
url : "/dashboard",
views : {
'create-claim' : {
templateUrl : "partials/create-claim.html",
controller : "create-claim-controller"
}
}
})
.state("portal.history", {
url : "/history",
views : {
'history' : {
templateUrl : "partials/history.html",
controller : "history-controller"
}
}
})
/* Other child states */
我在标题中使用角度材质标签进行导航。特定于每个选项卡的数据插入header.html中提供的命名视图中,因此我制作了" portal"陈述抽象和"创造 - 索赔"和"历史"作为其子女的国家。
现在,当我处于标签历史记录时,url为:http://localhost:8082/history并刷新浏览器,app从portal.history转到portal.create-claim状态。我知道Angular应用程序是SPA和页面刷新bootstraps整个应用程序但在刷新之前,如果url指向历史状态,那么在刷新之后它应该进入历史状态。我尝试使用$ stateChangeStart事件进行调试。我发现应用确实进入了" portal.history"状态,但然后立即重定向到第一个孩子的状态'抽象状态,即" portal.create-claim"。我通过制作" portal.history"来证实了这个问题。作为第一个孩子和" portal.create-claim"作为第二个孩子,然后它进入" portal.history"作为最终的重定向状态。
我无法弄清楚这个问题。我正在尝试为我的应用处理页面刷新。任何人都可以帮助我吗?
答案 0 :(得分:1)
这个过程有点棘手,但它正在发挥作用。我只想查看我自己的代码。
问题
如果refresh
包含view(html file)
指令它将重定向到第一个标签(第0个索引),那么无论何时md-tabs
页面都是如此。现在这些标签的索引从0 to length-1
开始。因此,如果您希望默认选项卡为3,则可以使用md-selected
指令的md-tabs
属性,但您要求根据URL以动态方式设置此属性。
首先,我们在主控制器中定义一个$scope
变量并将其分配给md-selected
。主控制器意味着与portal
状态相关联的控制器。如果它不存在则需要定义它。
现在,如果您对每个标签使用ui-view
,则每次都会调用相应控制器的不同URL。
问题
因此,如果您不在默认索引页面并刷新页面,则会将您重定向到默认索引,但将执行该URL的ui-route's resolve
。
因此,您需要将适当的索引传递给该主控制器,为此我们可以使用service
,因为它可用于整个应用程序。
实施例
首先我们定义一个服务
var Session = function () {
this.setIndex = function(index) {
this.index = index;
};
this.getIndex = function() {
return this.index ? this.index : 0 ;
};
};
Session.$inject = [];
angular.module('tempApp').service('Session', Session);
路由文件
.state("portal", {
url :"/",
templateUrl : "partials/header.html",
controller: "TempController"
resolve: {
temp: function (Session) {
Session.setIndex("0");
}
}
})
.state("portal.create-claim", {
url : "dashboard",
views : {
'create-claim' : {
templateUrl : "partials/create-claim.html",
controller : "create-claim-controller",
resolve: {
temp: function (Session) {
Session.setIndex("1");
}
}
}
}
})
.state("portal.history", {
url : "history",
views : {
'history' : {
templateUrl : "partials/history.html",
controller : "history-controller",
resolve: {
temp: function (Session) {
Session.setIndex("2");
}
}
}
}
查看文件:
<md-tabs md-selected="tabIndex">
....
</md-tabs>
那个
的TempControllervar TempController = function (Session) {
this.tabIndex = Session.getIndex();
};
TempController.$inject = ['Session'];
angular.module('tempApp').controller('TempController', TempController);